我正在 cent-OS 服务器上工作。我有两个脚本要通过 cron 运行。脚本使用 PHP 编写,我在 cent-OS 上安装了 PHP 的 Apache 模块。一个脚本应每天下午 6 点运行,另一个脚本应每周四运行。我的 cron 命令是:
00 18 * * * lynx -dump http://domain/folder1/script1.php //every Day
00 02 * * 5 lynx -dump http://domain/folder1/script2.php //every Thursday at 2am
我将这两行写入我的/etc/crontab
文件中并尝试从执行
[root@domain ~]# /etc/crontab crontab
-bash: /etc/crontab: Permission denied
在网上搜索但没有解决方案。有什么想法我遗漏了什么吗?
答案1
crontab
不是可执行文件。它由 cron 用来了解何时安排作业。
/etc/crontab
不可执行(因此出现错误)
您的 crontab 文件无效(不允许使用 C 或 Java 风格的注释):
来自手册页:
第一个非空格字符为井号 (#) 的行是注释,将被忽略。请注意,注释不能与 cron 命令位于同一行,因为它们将被视为命令的一部分。同样,注释也不能与环境变量设置位于同一行。
你应该写类似的东西:
# every day
0 18 * * * lynx -dump http://domain/folder1/script1.php > /tmp/somefilename
请注意,这只lynx -dump
会将页面打印到标准输出。如果要将其存储在某个地方,则需要将输出重定向到文件(参见示例)
要查看它是否有效,请等到 00:18 或使用更近的未来时间进行测试
答案2
知道我遗漏了什么吗?
没什么。你在错误的城市走进了错误的门,在错误的日子与错误的人交谈。除此之外,一切都如预期的那样。;-)
1) 您不应该通过在行//
尾添加注释来注释您的 crontab 行。相反,请这样做:
# every day
00 18 * * * lynx -dump http://domain/folder1/script1.php
# every Thursday at 2am
00 02 * * 5 lynx -dump http://domain/folder1/script2.php //every Thursday at 2am
2) 您安排任务在每天 18:00 和每周四凌晨 2 点运行。如果您尝试在这些时间窗口之外运行 crontab,cron 将仅检查是否有事可做,如果没有,它就会退出。
3)您是否检查过/var/log/cron
cron 是否在预定的时间内尝试运行您的脚本?
4) Cron 对路径很挑剔。尽量提供 的完整路径lynx
,最有可能是/usr/bin/lynx
。
5) 正如其他人提到的,/etc/crontab
这只是一个文本文件,而不是可执行文件。Cron 守护程序将检查每个用户的 cron 文件的内容/etc/crontab
,并在需要时执行某些操作。