【发布时间】:2014-12-19 07:10:08
【问题描述】:
我有一个奇怪的问题,即能够从命令行运行 bash 脚本,但不能从 root 的 crontab 条目运行。我正在运行 Ubuntu 12.04。
* * * * 1-5 root /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log
如果我使用 bash 从 cmd 行运行脚本,它可以正常工作,但 sh 失败并出现以下错误:
> jmeter-cron-randomise.sh: 7: jmeter-cron-randomise.sh: arithmetic
> expression: expecting primary: " % 1 "
用谷歌搜索了这个问题,似乎标准 shell 没有与 bash 相同的数学运算符,如 %(模数)。我不确定为什么脚本中的 cron 作业失败了?我假设这是因为它没有使用 bash shell?它肯定是被 cron 守护进程触发的(可以在 /var/log/syslog 中看到它)。非常感谢任何帮助。
【问题讨论】:
-
你的 shebang 线上有什么?
-
您的
cron是否使用/bin/sh运行命令?看起来它可能确实如此,因为如果您使用sh而不是bash(如:sh /home/…/jmeter-cron-randomise.sh)运行脚本,则会出现错误。在 Ubuntu 上,/bin/sh通常是dash,而不是bash。要修复,请在您的 crontab 条目中使用bash /home/…/jmeter-cron-dandomise.sh >> …。 -
看起来它正在运行 sh。如何强制它在 shebang 线之外运行 bash?
-
kal:运行
bash /path/of/script.sh。这个bash应该是which bash的输出,也就是二进制的全路径。 -
@kal
head -n 1 /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh | cat -vE的完整输出是什么?这将以视觉上明确的方式显示第一行,以帮助确定是否例如字节顺序标记使您的 shebang 无效。