2017-02-03 3 views
1

ich versuche, eine udev-Regel einmal eine Halterung ist bereit, auf eine Vagrant Box zu laufen:udev-Regel nicht korrekt funktioniert, wahrscheinlich Problem zu entkommen

SUBSYSTEM=="bdi",ACTION=="add",RUN+="/usr/bin/screen -m -d bash -c 'sleep 5; cd /vagrant/; sudo -E su -c "pm2 start daemon.json" vagrant;'" 

Aber der Befehl nicht ordnungsgemäß ausgeführt wird, da die PM2 doesn‘ t starten. Wenn ich /usr/bin/screen -m -d bash -c 'sleep 5; cd /vagrant/; sudo -E su -c "pm2 start daemon.json" vagrant;' manuell ausführe, funktioniert es.

Irgendwelche Ideen?

Antwort

0

Die verschachtelten Zitate sind sicherlich ein Teil des Problems, aber das größere Problem in den udev manual geschrieben:

nur für sehr kurze Lauf Vordergrund Aufgaben verwendet wird Dies kann

. Wenn Sie einen Ereignisprozess für einen längeren Zeitraum ausführen, können alle weiteren Ereignisse für dieses oder ein abhängiges Gerät blockiert werden. Das Starten von Daemons oder anderen lang andauernden Prozessen ist für udev nicht geeignet. Die gegabelten Prozesse, ob getrennt oder nicht, werden bedingungslos beendet, nachdem die Ereignisbehandlung beendet wurde.

Also Ihre Vorgehensweise muss geändert werden. Nehmen wir jedoch an, der Befehl pm2 start daemon.json ist entsprechend kurzlaufend: Ihre Frage ist auf jeden Fall interessant, da ähnliche Probleme häufig auftreten. Bitte betrachten Sie den Rest dieser Antwort als Beispiel für den allgemeinen Fall.

Statt mit den richtigen entweichende Sequenzen verrückt zu werden, können Sie einfach schreiben

RUN+="/usr/bin/screen -m -d bash -c 'sleep 5; cd /vagrant/; sudo -E -u vagrant pm2 start daemon.json" 

Eine noch einfachere Lösung

RUN+="/usr/bin/screen -m -d /usr/local/bin/start_vagrant_daemon" 

sein könnte, wo /usr/local/bin/start_vagrant_daemon ausführbar ist und hat folgenden Inhalt

#!/bin/bash 
sleep 5 
cd /vagrant/ 
sudo -E -u vagrant pm2 start daemon.json 

Beide Lösungen erfordern die Einrichtung der Korrekt t sudo Berechtigungen durch Bearbeiten /etc/sudoers oder (besser) Schreiben in eine neue Datei /etc/sudoers.d/vagrant_daemon nach der Aktivierung includedir /etc/sudoers.d in /etc/sudoers.

Verwandte Themen