我尝试了crontab,但它不起作用,它看不到文件的目录



我在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(的脚本指定所需的解释器。

最新更新