我正在共享托管,我正在尝试安排cronjob不时运行。通过cPanel我计划执行我的脚本,但即使根据我的主机支持cronjob运行,脚本似乎没有做任何事情。我通过cPanel设置的cron作业命令是:
/bin/sh /home1/myusername/public_html/somefolder/cronjob2.sh
和cronjob2.sh
#!/bin/bash
/home1/myusername/public_html/somefolder/node_modules/forever/bin/forever stop 0
通过SSH我执行:
/home1/myusername/public_html/somefolder/cronjob2.sh
它会根据需要永久停止。来自cronjob没有做任何事情。
我怎样才能使这个工作?
编辑:
所以我试过了:
/bin/sh /home1/username/public_html/somefolder/cronjob2.sh >> /tmp/mylog 2>&1
和mylog
条目说:
/usr/bin/env: node: No such file or directory
似乎永远需要运行节点,这是无法找到的。我怎么可能解决这个问题?
EDIT2:
superuser.com上接受的答案。谢谢大家的帮助 https://superuser.com/questions/763261/simple-script-run-via-cronjob-doesnt-work-but-works-from-shell/763288#763288
答案 0 :(得分:1)
对于crontab中的cron作业行,不需要指定shell的类型,例如perl。 这足够了,你的脚本包含了 shebang 线。 因此,您应该从您的cron作业行中删除/ bin / sh。
另一个方面,可能会通过交互式启动和cron守护程序启动导致脚本的不同行为,可能是不同的环境,首先是PATH变量。因此,如果脚本能够在非常有限的环境中执行,请检查cron守护程序提供的内容。您可以通过启动临时cron作业来实验确定您的cron作业环境,该作业执行" env"命令并将其输出写入文件。
更多方面:您是否已将cron作业的STDOUT和STDERR重定向到日志文件并阅读其内容以分析问题?你可以这样做:
your_cron_job >/tmp/any_name.log 2>&1
答案 1 :(得分:0)
根据您所写的内容,当您通过SSH运行脚本时,您使用的是bash
,因为这一行是您脚本中的第一行:
#!/bin/bash
但是,在crontab中,您强制使用sh
而不是bash
。您确定自己的脚本与sh
完全兼容吗?否则,只需在/bin/sh
命令中将/bin/bash
替换为cron
,然后重新测试。