Udev führt keine Zeilen in meinem Skript aus

351
JeromeLEKIEFFRE

Ich arbeite an einem Beaglebone Black unter debian. Ich schreibe Udev-Regeln zur Verwaltung der µSD-Karte. Was ich brauche, um Udev zu tun: Wenn meine µSD angeschlossen ist, mounten /media/sdcardSie die µSD auf (es funktioniert) und führen Sie das folgende Skript aus:

  • Stoppen Sie rsyslog.service (es tut es)
  • Verschieben Sie / var / log nach / media / sdcard (NICHT).
  • Erstellen Sie eine Verknüpfung von / var / log nach / media / sdcard / log (um die Protokollierung in der SD-Karte fortzusetzen) (NICHT, aber / media / sdcard / log ist nicht vorhanden, da der vorherige Schritt fehlgeschlagen ist.)
  • Starten Sie den Rsyslog-Dienst neu (dies ist der Fall).

Hier ist das Skript, das das tut, was ich gerade beschrieben habe:

logger 'Enterring /root/ServolineScripts/LogsonSDcard.sh script' logger 'Refreshing Mountinglogs' sudo rm /var/log/Mountinglogs.log logger 'Stopping syslog service' sudo /etc/init.d/rsyslog stop sudo mv /var/log /media/sdcard/ sudo ln -s /media/sdcard/log /var/log sudo /etc/init.d/rsyslog start logger 'Successfully restarted rsyslog, logs are back on syslog!' logger 'Restarted syslog service' logger 'Quitting /root/ServolineScripts/LogsonSDcard.sh script' 

Ich bin nicht sicher, warum das Verzeichnis / var / log nicht verschoben wird. Das gleiche Skript, das von Hand mit einem einfachen sh /root/ServolineScripts/LogsonSDcard.sh ausgeführt wird, funktioniert ...

Ich frage mich, ob es ein Problem der Rechte ist ...

0
Meine Güte, warum gibt es viele "Sudo" -Anrufe? `udev` führt seine Skripte mit Root-Berechtigungen aus, es braucht kein` sudo`. "Sudo" kann leicht nicht das tun, was Sie im allgemeinen Fall erwartet haben. Ich meine, bitte hör auf, den Dummkopf, den du in zufälligen Blogbeiträgen siehst, zu kopieren Denken Sie gründlich darüber nach, was Sie implementieren. kostix vor 6 Jahren 0
OK, ich schweife ab. Nun zu deinem wirklichen Problem. Wenn Sie alle `sudo`-Präfixe entfernen, funktioniert das? Ein anderer möglicher Ansatz besteht darin, ein Wrapper-Skript zu haben, das ein anderes ausführt - es enthält nur die "action" -Anweisungen und keine Aufrufe an den Logger und leitet seine beiden Ausgabeströme an den "logger" weiter (der in der Lage ist, Eingaben auf seinem stdout zu verbrauchen). So etwas wie `script_which_does_stuff 2> & 1 | logger -t microsd` kostix vor 6 Jahren 0
du hast recht mit der Überforderung von sudo;) Ich habe nicht darüber nachgedacht, dass Udev als root ausgeführt wurde ... (dummer Junge!) OK, ich hatte schon die Idee, ein Aktionsskript zu machen, und ich wunderte mich, warum es funktionieren sollte. aber ich bin drauf! Vielen Dank! Ich werde wiederkommen, wenn es funktionieren wird (ich hoffe ...) JeromeLEKIEFFRE vor 6 Jahren 0
Ich bin zurück und es geht viel besser ohne Sudo! ;) Und mit zwei separaten Skripten. @kostix Hast du eine Erklärung, warum es mit zwei verschiedenen Skripten funktioniert und nicht mit einem? JeromeLEKIEFFRE vor 6 Jahren 0
Ich nicht. Ich denke jedoch, dass das Auslassen von "sudo" der einzige Grund sein könnte, warum es funktioniert ;-) kostix vor 6 Jahren 0
Ich habe nur eine weitere merkwürdige Sache ... Ich habe ein paar Funktionen in meinem Haupt-Skript kopiert und eingefügt, aber wenn das Skript den Link von / var / log nach / media / sdcard / log erstellt, ist das Ergebnis ein Link in / media / sdcard / log to / media / sdcard / log ... sehr seltsam, denn von Hand ausgeführt, funktionierte das erste Skript, das ich in meinem Beitrag geschrieben habe, einwandfrei ... JeromeLEKIEFFRE vor 6 Jahren 0

1 Antwort auf die Frage

0
JeromeLEKIEFFRE

Ich schreibe eine Antwort mit dem, was mir in den Kommentaren geholfen hat.

Kredite an @kostix;)


Das Hauptproblem war wahrscheinlich die Überbeanspruchung von Sudo in einem Skript, das von Udev ausgeführt wird, das bereits über Rootberechtigungen verfügt . @kostix hat mir vorgeschlagen , zwei verschiedene Skripte zu schreiben, eines mit den Aktionen und eines der wichtigsten, das die Funktionen im Aktionsskript aufruft. Ich habe beide Lösungen durchgeführt, das sudo, was nicht existieren muss, gelöscht und ein anderes Skript mit Aktionen erstellt. Es hat perfekt funktioniert und ich kann jetzt andere Probleme in meinem Skript betrachten!