Что может привести к тому, что сценарии .sh будут нормально работать через оболочку SSH, но не при выполнении через PHP или crontab?
У меня есть VPS, на котором я запускаю игровые серверы, но для того, чтобы сделать его удобным для обслуживания, я планирую автоматизировать большую часть утомительных процессов (таких как настройка или удаление сервера) и сделать важные функции (такие как запуск и остановка серверов) проще. приемлемо для тех, кому это действительно необходимо.
Теперь, когда я сделал сценарии оболочки и протестировал их, они работали абсолютно нормально. startserver запустил сервер, restartserver перезапустил его и т.д. Но при запуске из PHP или, как я позже понял, из crontab, запуск серверов волшебным образом не работает. Их остановка, проверка их работы, обновление и все остальные функции работали, как и предполагалось, но запуск сервера ничего не дал. Он просто вернул 0, ничего не печатая.
Например, вот пример скрипта, который работает в любом случае: (statusserver.sh)
/sbin/start-stop-daemon -v -t --start --exec ~mta/servers/$1/files/mta-server -- -d
А вот тот, который ни в коем случае не работает: (startserver.sh)
/sbin/start-stop-daemon -v --start --exec ~mta/servers/$1/files/mta-server -- -d
Единственная разница в том, что в statusserver.sh есть «-t», который только скажет вам, действительно ли выполнение той же команды без -t будет успешным. И выполнение statusserver.sh вот так:
sudo -u mta ~mta/sh/statusserver.sh test
Действительно работает, напечатав что-то вроде «Would start ~mta/servers/test/files/mta-server -d». Но делая это:
sudo -u mta ~mta/sh/startserver.sh $2
Абсолютно ничего не делает. Он ничего не печатает и на самом деле возвращает 0 (что должно означать, что операция прошла успешно).
Теперь самое интересное: когда сервер уже запущен, startserver.sh сделает то, что должен: скажет, что сервер уже запущен, и вернет код ошибки. (Потому что start-stop-daemon достаточно любезен, чтобы сделать это для меня). Но он наотрез отказывается запускать что-либо.
Замена start-stop-daemon на что-то вроде:
sudo -u mta ~mta/servers/test/files/mta-server -d
Делает то же самое: просто откажется запускаться, но по-прежнему будет возвращать 0.
Да, кстати, это не проблема sudo. В этом я совершенно уверен, так как следующее тоже отлично работает
sudo -u web1 sudo -u mta ~mta/scripts/startserver.sh test
Итак, вернемся к моему вопросу: что может привести к тому, что Linux, Shell, Bash или что-то еще категорически отказываются запускать приложение при запуске через PHP или crontab, но с радостью принимают его при запуске через SSH? Есть ли какие-либо настройки, которые мне нужно переключить? Любой пакет, который может блокировать то, что я хочу сделать? Что-то еще, что мне просто не хватает?