好的,我已经编写了脚本,我将其放入/etc/cron.hourly
文件chmod 777
,但它不会(自动)运行。如果我手动运行它,它会正常工作。我还需要做其他事情吗?
答案1
中的条目cron.hourly
由运行部分机制运行(man run-parts
了解更多信息)。并且run-parts
会挑剔它认为有效的文件名。
例如,为您的脚本提供扩展名将使其无效并导致作业无法运行。[a-zA-Z0-9_-]
是有效字符,因此“。”使其无效。
/etc/cron.hourly
当向( 或.daily
,.weekly
等)添加作业时,始终在之后run-parts
通过发出命令来测试它是否真正运行:
run-parts --test /etc/cron.hourly
如果运行此命令后显示您的文件,则表示它已成功运行。否则,如果没有显示任何内容,则您的文件名无效。
你的剧本叫什么名字?
答案2
为什么不使用 crontab ( /etc/crontab ) 并在小时字段中使用 */1。我使用它每 5 分钟运行一次脚本,效果很好:
# m h dom mon dow user command
* */1 * * * user command
答案3
DaithiF 的回答应该是正确的答案。
另外,我的脚本第一行没有#!/bin/bash
。尽管可以使用命令行执行该脚本,但run-parts
它被拒绝,并显示“执行格式错误”。
将文件名从 更改scriptname.sh
为scriptname
并#!/bin/bash
在第一行中添加 使我的脚本能够每小时运行一次。
答案4
就我而言,我犯了这些错误,导致cron.hourly
无法执行我的脚本:
我忘了检查 crond 服务是否正在运行:
systemctl status crond
我没有像其他文件夹中的 cron 脚本一样在脚本文件的末尾添加新的空行。
我在 Windows 上使用 WinSCP 创建了脚本文件,因此插入了类似 Windows 的 EOL 符号,而 cron 无法正确解释该符号。所以我需要执行它
sed -i -e 's/\r$//' /etc/cron.hourly/myscript
来修复它。