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
.