我在Amazon-linux2ami上创建了一个crontab,并在crontab中创建了一项cronjob:
00 * * * * /var/www/html/cront.sh
01 * * * * /var/www/html/cront2.sh
30 * * * * /var/www/html/cront.sh
31 * * * * /var/www/html/cront2.sh
但它不起作用。为什么?
编辑:我尝试手动执行脚本,我注意到如果我在bash:上打印
./var/www/html/cront.sh
不起作用,但如果我打印f:
./cront.sh
它是有效的。(但我必须留在var/www/html目录中(为什么会出现这个问题?如何运行有效的cronjob?
感谢
您检查了这些脚本的权限吗?
此外,也许可以尝试将您的条目更改为:
00 * * * * /bin/bash /var/www/html/cront.sh
01 * * * * /bin/bash /var/www/html/cront2.sh
30 * * * * /bin/bash /var/www/html/cront.sh
31 * * * * /bin/bash /var/www/html/cront2.sh
看看这是否有效。
编辑:既然这有效,我将添加一个快速解释为什么这可以解决问题。。。
首先,脚本可能对生成crontab的用户没有执行权限('x'(。通过解释器调用脚本明确地绕过了这一点,因为脚本不再试图执行,而只是读取。
第二种可能性是shell脚本使用特定于bash的语法。cron的默认shell是sh
,这是一个比bash
更基本、更有限的shell。调用bash解释器专门解决了这个问题。请注意,您还可以为第一行带有shebangs(#!/bin/bash
(的脚本指定所需的解释器。