我已经创建了一个ntpdate
名为/etc/cron.hourly
#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test
我还对此文件执行了 Chmod 755。
但是我无法判断该文件是否已经运行!
这 3 个目录中均未创建该文件。
如果我手动运行,cd / && run-parts --report /etc/cron.hourly
那么文件就会被创建并且我会得到回声。
有人可以推荐(最好是一步一步的!)说明来测试它是否有效吗?
答案1
你应该查看你的/var/log/syslog
日志文件。如果 cron 已经运行,它将有一行如下内容:
Jun 11 19:09:01 penguin CRON[17376]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
有关故障排除提示,请参阅https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems
答案2
cron 的一个主要缺陷是 cron 在极其有限的 shell 环境中运行,因此很多变量无法导出到环境中,主要是 $PATH。确保使用可执行文件的所有绝对路径,包括echo
、uptime
、date
等常用函数都需要使用完整路径(/bin/echo
、/bin/date
、/usr/bin/uptime
)。要确定可执行文件的路径,可以使用which
如下命令:which echo
- 这将显示该工具的完整路径。
答案3
尝试将脚本(解释器)的第一行更改为:
#!/bin/bash
我以前也遇到过环境变量和 PATH 问题。将解释器更改为后,bash
问题就解决了。
答案4
鉴于我已经添加了clearme.sh
脚本/etc/cron.hourly/
只需过滤 CRON 任务终端强大的egrep和awk:
$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt
输出将如下所示:
Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
一步一步解释一切:
- 猫/ var /日志/系统日志- 打印系统日志
- egrep clearme- 但仅选择包含文本的行清除
- awk“{打印$1}”- 打印包含文本的那一行清除
- > ~/桌面/cronlog.txt- 将结果输出到文件中定时日志位于桌面目录。
第 4 步是可选的。它只会在终端而不是文件中打印结果。