Запустите скрипт с помощью rc.local: скрипт работает, но не при загрузке - PullRequest
37 голосов
/ 16 октября 2011

У меня есть скрипт node.js, который должен запускаться при загрузке и запускаться под пользователем www-data.Во время разработки я всегда запускал скрипт с:

su www-data -c 'node /var/www/php-jobs/manager.js

Я точно видел, что случилось, manager.js теперь отлично работает.В поисках ТАК я обнаружил, что должен был поместить это в свой /etc/rc.local.Кроме того, я научился направлять вывод в файл журнала и добавлять 2>&1 для «перенаправления stderr в stdout», и это должен быть демон, поэтому последний символ - &.

Наконец,мой /etc/rc.local выглядит так:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

su www-data -c 'node /var/www/php-jobs/manager.js >> /var/log/php-jobs.log 2>&1 &'

exit 0

Если я сам запустлю это (sudo /etc/rc.local): да, это работает!Однако, если я выполняю перезагрузку, процесс node не выполняется, /var/log/php-jobs.log не существует и, следовательно, manager.js не работает.Что происходит?

Ответы [ 16 ]

0 голосов
/ 21 августа 2018

сначала сделайте скрипт исполняемым с помощью sudo chmod 755 /path/of/the/file.sh, теперь добавьте скрипт в rc.local sh /path/of/the/file.sh перед выходом 0 в rc.local, затем сделайте rc.local исполняемым с sudo chmod 755 /etc/rc.local рядом с инициализацией rc.local use sudo /etc/init.d/rc.local start это запустит rc.local, теперь перезагрузите систему.Сделанный ..

0 голосов
/ 13 февраля 2018

Я использовал rc.local в прошлом. Но из моего опыта я узнал, что самый надежный способ запустить ваш скрипт во время загрузки системы - это использовать команду @ reboot в crontab. Например:

@reboot path_to_the_start_up_script.sh
0 голосов
/ 16 мая 2016

Насколько я понимаю, если вы поместите свой скрипт на определенный уровень RUN, вы должны использовать ln -s, чтобы связать скрипт с тем уровнем, на котором вы хотите, чтобы он работал.

0 голосов
/ 29 июля 2014

1 Не рекомендуется использовать root для запуска таких приложений, как node app.

Ну, вы можете сделать это, но можете поймать больше исключений.

2 Обычно rc.local запускается от имени пользователя root.

Так что, если ваш скрипт должен работать от имени другого пользователя, например, www U, убедитесь, что PATH и другая среда в порядке.

3 Я нашел простой способ запустить службу как пользователь:

sudo -u www -i / the / path / of / your / script

Пожалуйста, предпочтите руководство sudo ~ -i [команда] Опция -i (имитировать начальный вход в систему) запускает оболочку, указанную в записи базы данных паролей целевого пользователя, в качестве логинс-оболочки ...

0 голосов
/ 23 августа 2013

rc.local работает только при запуске.Если вы перезагружаетесь и хотите, чтобы скрипт выполнялся, он должен войти в файл rc.0, начиная с префикса K99.

0 голосов
/ 22 мая 2013

Скорее всего, это вызвано отсутствующей или неполной переменной среды PATH.

Если вы укажете полный абсолютный путь к исполняемым файлам (su и node), он будет работать.

...