У меня есть сценарий Python, который я хочу постоянно выполнять на компьютере с Ubuntu 12.04, и я делаю это, добавляя задание init, которое запускает короткий сценарий, который проверяет сеанс экрана и, если его нет, создает его .
/etc/init.d/my-script :
PATH=/sbin:/bin:/usr/sbin:/usr/bin
case "$1" in
start)
/usr/local/bin/start.sh
;;
stop|restart|force-reload)
;;
*)
;;
esac
exit 0
/usr/local/bin/start.sh :
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
SCREEN_NAME="my-script"
INVOCATION="./my-script.py"
# Make sure we are in the working directory.
cd /usr/local/bin
if ! screen -list | grep -q "${SCREEN_NAME}"; then
screen -dmS "${SCREEN_NAME}" "${INVOCATION}"
fi
Проблема в том, что экран не создается при запуске /etc/init.d/my-script start
. Он работает нормально, когда я выполняю ./start.sh
и когда я отлаживаю его, он определенно выполняет оператор screen внутри оператора if, а код выхода с экрана равен 0.
Так почему же он не создает экран?
Я предполагаю, что произошел сбой при запуске сценария my-script.py
, а не проблема с screen
. Я вижу, что вы ссылаетесь на него из текущего каталога - который может не быть текущим каталогом при запуске из init и / или cron.
Можете ли вы попробовать использовать полный путь к сценарию в переменной INVOCATION
?