通过cronjob运行的简单脚本不起作用,但可以从shell运行

时间:2014-06-03 21:52:30

标签: bash cron cpanel

我正在共享托管,我正在尝试安排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

2 个答案:

答案 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,然后重新测试。