文章目录
- 一、简介
- 二、cron.d下文件示例
- 三、被调用的脚本文件
- 四、检查脚本是否执行
- 五、遇到的脚本未执行的情况
一、简介
一般来说在/etc目录下,有5个以cron开头的目录,分别是/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly,/etc/cron.d。其中前四个目录下的脚本文件就是按周期调用,比如说cron.hourly下的脚本文件就是每小时调用一次,cron.daily下的脚本文件就是每天调用一次。
cron.d是用于非前四种情况,自定义调用规律的情况。其实自定义调用时,也可以直接修改/etc/crontab,但是一般不建议这样做,因此我们这里使用cron.d。
二、cron.d下文件示例
例如在cron.d下面放入myCronTest.sh(文件名随便取,自己能认出来就行)内容如下:
* * * * * root sh /tmp/myTest.sh
那么就会每分钟定时调用sh /tmp/myTest.sh。
cron.d下面文件的格式为
minute | hour | day | month | dayofweek | user | command |
---|---|---|---|---|---|---|
分钟 | 小时 | 日期 | 月份 | 星期 | 用户 | 命令 |
0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
例如上面的例子中,* * * * *
就代表每分钟执行(cron表达式,应该都不陌生,不赘述了),root代表用户。
三、被调用的脚本文件
也即上面所调用到的,放在/tmp目录下的myTest.sh(放什么目录都可以,我随便放的)
#!/bin/bash
echo "1" >> /tmp/test.txt
这里简单地输出一个1到文件中。(注:>和>>均表示输出,且均会新建不存在的文件,但>会覆盖之前的内容,>>则是追加到末尾)
四、检查脚本是否执行
查看/var/log/cron
文件。
有如下输出就说明执行成功了:
Jan 31 19:00:01 master CROND[18828]: (root) CMD (sh /tmp/myTest.sh)
五、遇到的脚本未执行的情况
1、使用service crond status
查看crond服务状态,可以使用service crond start
启动crond
2、脚本下必须使用全路径,也即>> /tmp/test.txt
不能简写成>> test.txt
.这个是在myTest.sh中,cron脚本这里的myCronTest.sh中也是一样的,都需要使用完整的路径。
3、如果查看四中的日志,如果发现输出为如下这样,在命令最末尾掺进了^M,则是由于cron脚本文件为windows格式导致有了中文换行符。转换下脚本格式,或者删除之后重新在linux中重新新建文件即可。
Jan 31 19:00:01 master CROND[18828]: (root) CMD (sh /tmp/myTest.sh^M)
(当这样执行时,myTest.sh^M文件不存在,只存在myTest.sh文件,因此没有文件被执行)