Почему rc.local не запускает этот скрипт?

Мне нужно запустить скрипт при запуске, скрипт должен запускаться от имени определенного пользователя, а не от имени пользователя root, я попытался добавить скрипт в /etc/rc.local следующим образом:

#!/bin/sh -e
#
# rc.local
#
#!/bin/sh
su - tue -c "/home/tue/main"
su - tue -c "/opt/craftbukkit/start.sh"

Первая строка запускает программу main в / home / tue, все работает нормально. Вторая строка - мой сценарий, но по какой-то причине он не запускается?

1
задан 10 November 2017 в 21:23

3 ответа

Примите во внимание что:

  1. вторая команда могла только запуститься, когда первое завершается (или перейдите к фону);

  2. -e опция остановит выполнение, если команда возвратит ненулевой код выхода.

1
ответ дан 10 November 2017 в 21:23

Вы уверены, что ваша команда не выполняется? В моей ситуации я обнаружил, что он запускается, но произошла ошибка, которая привела к его остановке. Вы можете выяснить, получаете ли вы ошибку, используя что-то вроде nohup:

nohup bash /home/ubuntu/myscript.sh > /home/ubuntu/error_log.txt 2>&1 &

... где bash /home/ubuntu/myscript.sh - фактическая команда, которую я хочу выполнить. Проверьте журнал ошибок и посмотрите, что вы найдете.

Возможно, вы запускаете что-то вроде java или утилиту, подобную drush, и ваша переменная $ PATH не знает, как ее найти во время запуска /etc/rc.local, что было моей проблемой. Переменная $ PATH очень минимальна на момент запуска этого скрипта.

Если вы хотите увидеть, что находится в вашей переменной $ PATH во время ее запуска, поместите это в ваш файл /etc/rc.local:

echo $PATH > /home/rc_local_path.log

.. И проверьте файл журнала после перезагрузки. В моем случае (и, вероятно, в вашем) переменная пути была следующей:

/sbin:/usr/sbin:/bin:/usr/bin

Ошибка, которую я получил, была похожа на drush - command not found ... поэтому я набрал [ 116] и выяснил, что он был установлен в / usr / local / bin, которого на момент запуска сценария не было в $ PATH, поэтому я сделал символическую ссылку на него через ln -s /usr/local/bin/drush /usr/bin/drush. Теперь мой скрипт работает без ошибок.

0
ответ дан 10 November 2017 в 21:23

Попробуйте что-то вроде этого:

#!/bin/sh -e
#
# rc.local
#
#!/bin/sh
su - tue -c "/home/tue/main" &
su - tue -c "/opt/craftbukkit/start.sh" &

Это запустит оба процесса в фоновом режиме, так что остальная часть сценария сможет продолжаться в обычном режиме. Если это не то, что вы хотите, пожалуйста, объясните вашу ситуацию более подробно.

0
ответ дан 10 November 2017 в 21:23

Другие вопросы по тегам:

Похожие вопросы: