我在启动时使用 cron 做错了什么?
例子:
手动启动:screen -S example ./script.sh
手动恢复:screen -x example
现在,我只是尝试在启动时使用 cron 做同样的事情(嗯,启动部分)
@reboot cd /home/administrator/script && screen -S 示例 ./script.sh
我认为它不需要屏幕就可以工作。例如:
@reboot cd /home/administrator/script && ./script.sh
但我还需要它在后台运行,独立于终端。我尝试过其他选项,例如 init、init.d,但似乎有很多人对它们在哪个版本的 Linux 上如何工作感到困惑。如果你能修复我上面的错误或向我展示更好的解决方案,那就太好了。
我正在使用 Ubuntu 12.04.2 LTS
谢谢
* 更新 *
因此,回应 Jan Wikholm,我已经尝试了绝对路径,但完全失败了。
例子
如果我在控制台中测试这个:
屏幕 -S 示例 /home/administrator/script/script.sh
脚本未执行。我是否遗漏了某些概念?
我立即收到屏幕错误消息 [屏幕正在终止]
* 解决方案 *
终于搞明白了。screen 的问题在于可执行文件的路径。
这是最后一个 crontab 条目,效果非常好
@reboot cd /home/administrator/script && /usr/bin/screen -dmS 示例 ./script.sh
感谢 Jan 的帮助
答案1
您是否尝试过使用以下命令启动它:
nohup /path/to/script/script.sh &> /output/goes/here &
这将启动脚本,将 STDOUT 和 STDERR 重定向到文件,将其启动到后台并告诉它忽略挂断信号(因为其父进程正在死亡)。
编辑:另外,总是包装 init/cron 脚本是更明智的做法,这样 cron 必须调用的行本身只是一个脚本,而不是“cd /somewhere && ./script.sh”。所以如果您只有 /path/to/launcher.sh,然后包含“cd /somewhere && screen foobar”等,那就更好了。
答案2
终于搞明白了。screen 的问题在于可执行文件的路径。
这是最后一个 crontab 条目,效果非常好
@reboot cd /home/administrator/script && /usr/bin/screen -dmS 示例 ./script.sh
感谢 Jan 的帮助
附言:是的,我尝试回答,但是 8 个小时内都不允许我回答,所以我暂时只是在原始帖子中发布了答案。