今天想了解一下Linux Crontab。嗯,在Windows上,可以看做和定时任务差不多。
“要在特定时间进行特定工作。”
如果是这样,可以使用crontab
,轻松使用Linux
。
先看一下基本的crontab
使用方法吧。在Linux shell
中输入如下内容:
$ crontab -e
那么可以编辑的地方就会加载,这里就是可以设置crontab
的地方。
在这里输入各种crontab
指令后,输入colon(:)
后输入wq
,更新crontab
吧。
相反,如果您想查看当前crontab
中包含哪些内容,请输入以下内容:
$ crontab -l
那么就像用cat
指令读取文件一样,以标准输出显示crontab
内容。
但是(虽然几乎没有)如果想删掉crontab
呢?
在Linux Shell
中输入如下内容:
$ crontab -r
这样就学会了crontab
的基本设置、确认和删除。那么在crontab
上注册一个Cron
,实践一下吧。
如下所示,输入crontab-e
后,请输入以下内容。保存时,像vi
一样输入Colon(:)
后更新为wq
即可。
* * * * * ls -al
有五颗星,还有后面写着命令语,这是基本使用方法。当然,不仅可以使用ShellScript
,还可以使用Linux
命令。这里用ShellScript
的方法进行了说明。
如果有五颗星,就会"每分钟运行一次",让我们仔细看看星星指的是什么吧。
一个典型的crontab
文件由五或六个字段组成,每个字段代表一个时间单位,后面跟着要运行的命令。
* * * * * command to execute
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天为0或7)
| | | +------- 月份 (1 - 12)
| | +--------- 一个月中的第几天 (1 - 31)
| +----------- 小时 (0 - 23)
+------------ 分钟 (0 - 59)
*
:代表该字段的所有可能值。例如,第一个星号代表每分钟。,
:用于分隔列表中的项目。例如,1,3,5
代表第1分钟、第3分钟和第5分钟。-
:用于定义范围。例如,1-5
代表从第1分钟到第5分钟。/
:用于指定步长值。例如,*/2
代表每隔两分钟。*/15 * * * * command
:每15分钟执行一次命令。0 8 * * * command
:每天早上8点执行一次命令。0 8 1 * * command
:每月1日的早上8点执行一次命令。0 8 * * 5 command
:每个星期五的早上8点执行一次命令。@reboot
:指定命令在每次重启时执行。@yearly
:等同于0 0 1 1 *
,每年运行一次。@annually
:同@yearly
。@monthly
:等同于0 0 1 * *
,每月运行一次。@weekly
:等同于0 0 * * 0
,每周运行一次。@daily
:等同于0 0 * * *
,每天运行一次。@hourly
:等同于0 * * * *
,每小时运行一次。crontab
环境变量和登录shell可能不同,因此建议在命令中使用完整的路径。crontab
默认不会发送邮件,除非你在命令后面加上> /dev/null 2>&1
来忽略输出。systemctl start cron
或service cron start
。# 每分钟 执行 test.sh
* * * * * /home/script/test.sh
# 每周 星期五 上午 5点 45分 执行 test.sh
45 5 * * 5 /home/script/test.sh
# 每日 每时 0分, 20分, 40分 执行 test.sh
0,20,40 * * * * /home/script/test.sh
# 每日 1点0分到30分 每分钟 执行 test.sh
0-30 1 * * * /home/script/test.sh
# 每间隔 10分钟 执行 test.sh
*/10 * * * * /home/script/test.sh
# 5日到6日 2点,3点,4点 每10分 执行 test.sh
*/10 2,3,4 5-6 * * /home/script/test.sh
# 错误的例子
* * * 5 5
/home/script/test.sh
# 好的例子
* * * 5 5 /home/script/test.sh
# 注释 #
#--------------------#
# 这是注释 #
#--------------------#
#
输入,后面出现的全部文字都可以进行注释。
使用crontab
定期处理作业是很好的,但有时想留下有关处理明细的日志。那个时候像下面一样写一下:
* * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1
如上填写,每分钟更新test.sh.log
文件,以了解作业内容是如何处理的。如果删除2>&1
,ShellScript
只显示标准输出内容。2>&1
就在这里确认吧。
但是,如果这个运行太频繁,而且需要持续加载,所以要继续保留日志的话,输入如下:
* * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1
那么就可以确认日志一直在累积。但是,如果日志堆积过多,会影响Linux
的性能,因此需要偶尔空出或重新创建文件的意识。
相反,日志是为不要的cron
输入如下内容:
* * * * * /home/script/test.sh > /dev/null 2>&1
好,如果使用 crontab-r
或者不小心把crontab
目录弄丢,现有的crontab
明细都没了,真的会很慌张的。所以让我们定期备份crontab
吧。 备份有如下方法。
crontab -l > /home/bak/crontab_bak.txt
把crontab
的内容做成txt
文件保存。好,这个也能实现自动化吗?
50 23 * * * crontab -l > /home/bak/crontab_bak.txt
这样做就可以了吧?这是每天晚上11点50分备份crontab
的Cron
指令。
简单地了解了一下crontab
。如果有需要添加的内容或与实际不符的部分,请留言。