2017-02-03 5 views
1

я пытаюсь запустить правило Udev раз в гору готов на Бродячей коробке:правило Udev не работает должным образом, возможно избежать проблемы

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;'" 

Но команда не работает должным образом, так как пм2 Безразлично» t начать. Когда я выполняю /usr/bin/screen -m -d bash -c 'sleep 5; cd /vagrant/; sudo -E su -c "pm2 start daemon.json" vagrant;' вручную, он действительно работает.

Любые идеи?

ответ

0

Вложенные кавычки, безусловно, часть проблемы, но большая проблема записывается в udev manual:

Это может быть использован только для очень коротких затяжных приоритетных задач. Запуск процесса события в течение длительного периода времени может блокировать все дальнейшие события для этого или зависимого устройства. Запуск демона или других длительных процессов не подходит для udev; раздвоенные процессы, отдельные или нет, будут безоговорочно убиты после завершения обработки событий.

Так что ваш подход должен быть изменен. Однако предположим, что команда pm2 start daemon.json соответственно коротко работает: ваш вопрос в любом случае интересен, потому что подобные проблемы с котировками возникают часто. Поэтому, пожалуйста, рассмотрите остальную часть этого ответа в качестве примера для общего случая.

Вместо того, чтобы сойти с ума с правильными последовательностями, вылетающих, вы можете просто написать

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

Еще более простое решение может быть

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

где /usr/local/bin/start_vagrant_daemon выполнима и имеет следующее содержание

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

Оба решения требуют установки коррекции t sudo, редактируя /etc/sudoers или (лучше) записывая их в новый файл /etc/sudoers.d/vagrant_daemon после включения includedir /etc/sudoers.d в /etc/sudoers.

Смежные вопросы