我有一个 Python 脚本,希望它在 Ubuntu 12.04 机器上一直运行,我通过添加一个初始化作业来实现这一点,该作业运行一个简短的脚本,检查屏幕会话,如果不存在则创建一个。
/etc/init.d/我的脚本:
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
,当我调试它时,它肯定会执行 if 语句内的 screen 语句,并且 screen 的退出代码为 0。
那么为什么它不创建屏幕?
答案1
我猜是运行脚本时出现故障my-script.py
,而不是出现了问题screen
。我看到您从当前目录引用它 - 从 init 和/或 cron 运行时可能不是当前目录。
您可以尝试在变量中使用脚本的完整路径吗INVOCATION
?