我在Amazon linux 2 ami上创建了一个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
不起作用,但如果我执行printf:
./cront.sh
有效。 (但我必须留在var / www / html目录中) 为什么会出现这个问题?我该如何运行能正常工作的cronjob?
谢谢
答案 0 :(得分:-1)
您是否检查了这些脚本的权限?
此外,也许尝试将您的条目更改为:
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的默认外壳是sh
,比bash
更基本和更受限制的外壳。调用bash解释器可以专门解决此问题。请注意,您还可以为第一行带有shebangs(#!/bin/bash
)的脚本指定所需的解释器。