Ubuntu Crontab 或 init 脚本启动

Ubuntu Crontab 或 init 脚本启动

我在启动时使用 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 个小时内都不允许我回答,所以我暂时只是在原始帖子中发布了答案。

相关内容