|
Strinox
Anmeldungsdatum: 14. Oktober 2022
Beiträge: Zähle...
|
Hallo. Ich arbeite gerade an einem Projekt mit dem Raspberry. Es soll eine PDF-Datei von einem USB-Stick automatisiert per Mail versendet werden, sobald der USB-Stick eingesteckt wird. Als erstes habe ich eine udev-rule erstellt, die erkennt wenn ein usb angeschlossen wird.
| ACTION=="add", KERNEL=="sd[a-z]1"- RUN+="/bin/usb_automail.sh"
|
Dann habe ich das Skript zur versendung der Mail geschrieben. (/bin/usb_automail.sh) | #!/bin/bash
/bin/example.sh | telnet smtp.mailserver.local 25 &> /dev/null
whoami >> /tmp/automail.log
echo "$(date) automail ausgeführt" >> /tmp/automail.log
|
Die Datei /bin/example.sh beinhaltet die Befehle die bei der telnet-verbindung eingegeben werden. Das Skript /bin/usb_automail.sh funktioniert wenn ich es einzeln ausführe. (Mail kommt an) Wenn ich den USB einstecke zieht auch die udev. (Sehe ich anhand eines Eintrages in /tmp/automail.log) Die E-mail wird jedoch nicht verschickt. Woran könnte das liegen? PS:Ich habe es als normalen Benutzer sowie als root ausprobiert.
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14402
|
Strinox schrieb: Es soll eine PDF-Datei von einem USB-Stick automatisiert per Mail versendet werden, sobald der USB-Stick eingesteckt wird.
... Die E-mail wird jedoch nicht verschickt. Woran könnte das liegen?
Teste mal ob eine andere Datei, die sich auf der SD-Karte des PI (und nicht auf dem gerade eingesteckten USB-Stick) befindet, versendet werden kann (wenn der USB-Stick eingesteckt wird).
|
|
Strinox
(Themenstarter)
Anmeldungsdatum: 14. Oktober 2022
Beiträge: Zähle...
|
Dass die Datei angehängt wird hab ich noch garnicht integriert.
Dies werde ich erst implementieren wenn die rule und das Skript funktionieren. Aber es geht darum das die Mail nicht versendet wird. Wenn ich jedoch das Skript usb_automail.sh starte, dan funktioniert es.
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14402
|
Strinox schrieb: Wenn ich jedoch das Skript usb_automail.sh starte, dan funktioniert es.
Dann fehlen evtl. beim versenden via udev-Regel, irgendwelche erforderliche "Ressourcen" bzw. env.-Variablen, die beim manuellen ausführen, vorhanden sind.
|
|
Strinox
(Themenstarter)
Anmeldungsdatum: 14. Oktober 2022
Beiträge: 10
|
Löst die udev-regel das Skript nicht gleich aus wie wenn ich das Skript in der Kommandozeile aufrufe?
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14402
|
Strinox schrieb: Löst die udev-regel das Skript nicht gleich aus wie wenn ich das Skript in der Kommandozeile aufrufe?
Anscheinend nicht. Sieht man ja auch immer wieder bei cronjobs (als Beispiel aus diversen Forenthreads), dass eine crontab manche Pfade bzw. manche Variablen die für die Kommandozeile (schon) bekannt/konfiguriert sind, nicht kennt (... und dort dann richtigerweise explizit eingetragen werden müssen). EDIT: BTW: In der Datei "/lib/udev/rules.d/50-udev-default.rules" sind (einige) Umgebungsvariablen für udev gesetzt. Man müsste jetzt wissen, ob bzw. welche davon, Einfluss auf die Ausführung deines Scriptes (via udev) haben.
|
|
sebix
Ehemalige
Anmeldungsdatum: 14. April 2009
Beiträge: 5584
|
Warum verwendest du telnet statt mail? Wie sieht /bin/example.sh aus? Warum verwendest du fuer telnet nicht den absoluten Pfad? Damit verlaesst du dich darauf, dass PATH so gesetzt ist, wie von dir erwartet.
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13242
|
Man könnte oben im Skript diese Zeile einfügen, um zu sehen, wie die Umgebung und ein paar andere Dinge aussehen: | { id; env; } >|/tmp/mailenv.$$
|
Dann schaust Du mal, was die unterschiedlichen Ausführungen dort hinterlassen. sebix schrieb: Warum verwendest du telnet statt mail?
DAS habe ich mich auch gefragt. Alternativ mailx, elm, mutt. Es gibt reichlich Kommandozeilenprogramme, mit denen man Email verlässlich verschicken kann.
|
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 9837
|
Strinox schrieb: […] udev-rule […] E-mail wird jedoch nicht verschickt. Woran könnte das liegen?
Udev läuft in einer Sandkiste. Netzwerk-Zugriffe (u.a.) aus Udev-Regeln sind generell verboten und werden blockiert.
|
|
Strinox
(Themenstarter)
Anmeldungsdatum: 14. Oktober 2022
Beiträge: 10
|
Ich konnte das Problem lösen. Das Problem war, dass mein Skript bereits ausgeführt wird bevor der usb gemountet ist. Neuer Code:
| #!/bin/bash
{
sleep 2
PFAD=$(find /media/usbreader02 -name "*.pdf")
echo -e "Textinhalt" | mail -s "Überschrift" -a .... -A "$PFAD"
}&
|
Mit diesen modifikationen funktionierts jetzt.sebix schrieb: Warum verwendest du telnet statt mail?
Ich hatte zuerst mail verwendet, dann habe ichs mit telnet versucht um den Mailserver direkt anzusprechen. Werde es jetzt wieder mit mail machen, vereinfacht auch das anfügen eines Anhangs.
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14402
|
Strinox schrieb: Das Problem war, dass mein Skript bereits ausgeführt wird bevor der usb gemountet ist.
Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann? Wie ist die Ausgabe von:
systemctl cat systemd-udevd.service | grep -i address
?
|
|
Strinox
(Themenstarter)
Anmeldungsdatum: 14. Oktober 2022
Beiträge: 10
|
lubux schrieb: Strinox schrieb: Das Problem war, dass mein Skript bereits ausgeführt wird bevor der usb gemountet ist.
Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann? Wie ist die Ausgabe von:
systemctl cat systemd-udevd.service | grep -i address
?
RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6
IPAdressDeny=any
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14402
|
Strinox schrieb: lubux schrieb: Strinox schrieb: Das Problem war, dass mein Skript bereits ausgeführt wird bevor der usb gemountet ist.
Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann?
Du hast aber die Frage:
Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann?
, noch nicht beantwortet. BTW:
Note that running programs that access the network or mount/unmount filesystems is not allowed inside of udev rules, due to the default sandbox that is enforced on systemd-udevd.service.
Starting daemons or other long-running processes is not allowed; the forked processes, detached or not, will be unconditionally killed after the event handling has finished. In order to activate long-running processes from udev rules, provide a service unit and pull it in from a udev device using the SYSTEMD_WANTS device property. See systemd.device(5) for details.
Quelle: manpage für udev.
|
|
Strinox
(Themenstarter)
Anmeldungsdatum: 14. Oktober 2022
Beiträge: 10
|
Du hast aber die Frage:
Warum muss der USB-Stick gemountet sein, damit das Script die eMail erfolgreich versenden kann?
, noch nicht beantwortet.
Beim der telnet version hat sich herausgestellt das es sich um ein Problem der Namensauflösung handelt. Wiso weiss ich auch nicht. Bei der mail version wollte ich die ganze Zeit den Anhang mitversenden und somit war die var Pfad mitangegeben. Da aber mein Skript gestartet ist bevor der usb gemountet ist, Wurde in $Pfad nichts gespeichert und die Mail wurde nicht versendet. Ich hoffe ich konnte das einigermassen verständlich beschreiben.
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14402
|
Strinox schrieb: Beim der telnet version hat sich herausgestellt das es sich um ein Problem der Namensauflösung handelt. Wiso weiss ich auch nicht. Bei der mail version wollte ich die ganze Zeit den Anhang mitversenden ...
Der Anhang ist auf dem USB-Stick? BTW: Funktioniert es jetzt auch mit telnet, wenn Du die IP-Adresse verwendest (... damit keine Namensauflösung erforderlich ist) und Du den Anhang _nicht_ mit versendest?
|