Мне нужно запустить скрипт при запуске, скрипт должен запускаться от имени определенного пользователя, а не от имени пользователя 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, все работает нормально. Вторая строка - мой сценарий, но по какой-то причине он не запускается?
Примите во внимание что:
вторая команда могла только запуститься, когда первое завершается (или перейдите к фону);
-e
опция остановит выполнение, если команда возвратит ненулевой код выхода.
Вы уверены, что ваша команда не выполняется? В моей ситуации я обнаружил, что он запускается, но произошла ошибка, которая привела к его остановке. Вы можете выяснить, получаете ли вы ошибку, используя что-то вроде 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
. Теперь мой скрипт работает без ошибок.
Попробуйте что-то вроде этого:
#!/bin/sh -e
#
# rc.local
#
#!/bin/sh
su - tue -c "/home/tue/main" &
su - tue -c "/opt/craftbukkit/start.sh" &
Это запустит оба процесса в фоновом режиме, так что остальная часть сценария сможет продолжаться в обычном режиме. Если это не то, что вы хотите, пожалуйста, объясните вашу ситуацию более подробно.