本文最后更新于:2024年5月7日 下午
Linux 中有时会遇到需要定时自动执行任务的情况,本文记录Linux 计划任务相关命令。
计划任务
- 计划任务指的是需要定时自动执行或周期执行的工作任务
- linux系统中,可以通过cron和at两种命令实现计划任务
at 单次计划任务
指的是定时执行一次的计划任务,可以使用
at
命令完成
安装
1 |
|
开机启动
1 |
|
命令格式
-
创建任务
1
at + 时间
- 时间格式
格式 示例 含义 HH:MM 02:00 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务 HH:MM YYYY-MM-DD 04:00 2016-09-20 在某年某月的某一天的特殊时刻进行该项任务 HH:MM[am/pm] [Month] [Date] 04pm March 17
17:20 tomorrow在某月的某一天的特殊时刻进行该项任务 HH:MM[am/pm] +
number [minutes/hours/days/weeks]now + 5 minutes
04pm + 3 days在某个时间点再加几个时间后才进行该项任务 -
查看计划任务
1
2at -l
atq -
查看任务内容
1
at -c <job-id>
-
删除计划任务
1
atrm <job-id>
-
保存任务(按键)
1
ctrl D
-
执行方式为交互式
-
at 队列存放在
/var/spool/at
目录中 -
通过
/etc/at.{allow,deny}
控制用户是否能执行at任务(白名单优先)先寻找
/etc/at.allow
文件,文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在at.deny 当中)如果/etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者则可使用 at 命令。如果两个文件都不存在,只有 root 可以使用 at 这个命令。(相当于一个空的/etc/at.allow文件)
cron 周期性任务计划
命令用法
命令选项 | 含义 |
---|---|
-e | 编辑计划任务 edit |
-l | 查看计划任务 display |
-u | 指定用户 user |
-r | 删除计划任务 remove |
-
日志:
/var/log/cron
-
系统cron任务:
/etc/crontab
-
计划任务都会被保存在
/var/spool/cron/
,文件命名就是用户名,需要 root 才能进入 -
注释行以 # 开头
-
配置任务格式 (* 为时间设置)
1
* * * * * user-name command
-
时间设置
第n个星星 含义 1 minute 分钟 (0-59) 2 hour 小时 (0-23) 3 day of month (1-31) 4 month 月份 (1-12) or jan, feb, mar, apr … 5 day of week(0-6) Sunday=0 or 7 or sun, mon, tue, wed, thr, fri, sat -
时间配置符号
符号 含义 , 间隔时间 - 连续时间 / 每隔多久时间 * 所有时间 最小执行时间为每分钟
-
例如执行定期备份数据的脚本:
1
0 1 * * * root cd /etc/data_rsync && /usr/local/Anaconda3/bin/python rsync.py
表示 root 用户每天凌晨 1:00 进入到
/etc/data_rsync
文件夹执行 python 脚本
命令示例
-
指定用户
vvd
创建 crontab1
crontab -e -u vvd
-
查看 crontab
1
crontab -lu vvd
-
查看用户
vvd
的 crontab 文件1
crontab -eu vvd
-
删除用户计划任务
1
crontab -ru vvd
-r 删除crontab,会删除整个文件,删除所有任务
编辑器选择
使用crontab设置定时任务时第一次执行"crontab -e"需要选择编辑器,如下所示
1 |
|
选择的时候 它提示第一个是最简单的,按它的建议选择第一个后,却用不惯
更换命令:使用命令 select-editor
重新选择编辑器,习惯使用的是 /usr/bin/vim.basic
1 |
|
选择完后 再重新输入"crontab -e"即可看到熟悉的vim编辑框
配置生效
- 配置完计划任务后需要重启 cron 服务来使得改动生效
1 |
|
- 或
1 |
|
- 或
1 |
|
查看日志
- 默认情况下可以在
/var/log/syslog
中看到 crontab 日志
1 |
|
计划任务示例
示例任务 | 含义 |
---|---|
45 4 1,10,22 * * /usr/bin/systemctl restart network | 每月1、10、22日的 4:45 重启network服务 |
10 1 * * 6,7 /usr/bin/systemctl restart network | 每周六、周日的1:10重启network服务 |
*/30 18-23 * * * /usr/bin/systemctl restart network | 每天18:00至23:00之间每隔30分钟重启network服务 |
3,15 8-11 */2 * * /usr/sbin/reboot | 每隔两天的上午8点到11点的第3和第15分钟执行一次重启 |
30 2 * * 7 /usr/bin/cp /etc/fstab /tmp/fstab-date “+\%F_\%T” |
每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss |
0 4 1 1 * /usr/bin/systemctl restart smb | 一月一号的4点重启smb |
0 23-0/1,1-7/1 * * * /usr/bin/systemctl restart smb 0 23,0,1,2,3,4,5,6,7 * * * /usr/bin/systemctl restart smb |
晚上11点到早上7点之间,每隔一小时重启smb |
0 * * * * /usr/bin/systemctl restart smb | 每一小时重启smb |
示例
-
以定时更新 git 仓库为例
-
编写脚本:
1 |
|
- 测试脚本:
- 配置 conrtab:
1 |
|
- 重启计划任务服务:
1 |
|
- 确认效果:
-
确实每2分钟更新过一次
-
查看日志
1 |
|
- crontab 正常运作
参考资料
- https://www.cnblogs.com/du-z/p/10858967.html
- http://www.178linux.com/44790
- https://blog.csdn.net/qq_36324958/article/details/122060867
- https://blog.csdn.net/csdn_yasin/article/details/70332796?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-1-70332796-blog-94103212.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-1-70332796-blog-94103212.pc_relevant_default&utm_relevant_index=2
- https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log
- https://www.jianshu.com/p/2d356b1cd8d2
文章链接:
https://www.zywvvd.com/notes/system/linux/linux-schedule-task/linux-schedule-task/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付