Linux 创建周期性计划任务

688 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

之前的文章Linux at 命令语法详解介绍了at命令,它用来执行一次性定时计划任务。接下来,再来介绍一下周期性执行的计划任务。

我们在工作中,周期性的定时任务会经常用到,比如系统文件的定时备份、日志的定时清理等。crontab是Linux系统中设置周期性计划任务的命令,crond命令会每分钟定期检查是否有要执行的任务,如果有要执行的任务便会自动执行。

crontab命令

语法格式

crontab [-u user] -[ler]

参数选项

  • -l:列出所有任务
  • -e:编辑任务
  • -r:移除任务
  • -u user:仅root可运行,为指定用户管理cron任务

编辑计划任务

编辑计划任务其实就是编辑一个计划任务的文件,文件的一行设置一个计划任务。

crontab -e

每行的格式如下:

# .---------------- minute 分钟 (0-59)
# |  .------------- hour 时 (0-23)
# |  |  .---------- day of month 日 (1-31)
# |  |  |  .------- month 月 (1-12)
# |  |  |  |  .---- day of week 周 (0-7) (其中0和7都代表星期天)
# |  |  |  |  |         .----要执行的命令
  |  |  |  |  |         |
  *  *  *  *  * user command

例如,设置每分钟将当前时间保存到/home/date_test.txt文件的任务:

*/1 * * * * date > /home/text.txt

一分钟之后,打开/home/text.txt文件,如果有看到时间就说明设置成功了。

除了*号和/符号还有其它符号来设定时间:

符号含义
*(星号)不限制,什么时候都可以
,(逗号)如果有多个时段,用逗号分开,例如每小时的30分和45分执行命令30,45 * * * * date > /home/text.txt
-(减号)一个时间段内执行任务,例如每小时的30-45分执行命令30-45 * * * * date > /home/text.txt
/(斜线)每隔多少时间就执行一次命令,例如上例*/1 * * * * date > /home/text.txt表示每隔1分钟执行一下命令

注意:crontab -e编辑的周期性计划任务存放在/var/spool/cron/用户名文件中,例如root用户的在/var/spool/cron/root文件中, 但最好不要直接编辑该文件

查看任务列表

查看所有计划任务列表:

crontab -l
# */1 * * * * date > /home/test.txt
# 30-45 * * * * date > /home/test.txt

查看指定用户的计划任务列表:

crontab -u username -l

删除计划任务

删除所有计划任务:

crontab -r

删除指定用户的计划任务:

crontab -r -u username

但是并不建议使用这个命令,这个命令会删除系统上的所有计划任务,有可能会误删不应该删除的任务,建议通过crontab -e命令编辑,直接删除不需要的那一行任务即可。

字符串指定任务执行时间

Cron支持使用特定的字符串,更快速的创建命令:

  • @hourly:每小时运行一次
  • @midnight:每天运行一次
  • @daily:午夜运行一次
  • @weekly:每周运行一次
  • @monthly:每月运行一次
  • @annually:每年运行一次
  • @yearly:每年运行一次
  • @reboot:每次启动时运行一次

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !