Linux有三种计划任务:
at:指定一个时间执行一个任务(适用一个或者多个任务,执行一次以后就不用了)
cron:根据时间表来自动执行
anacron:在一个指定时间间隔错过后自动执行任务
1.at
1.at:安排一个任务在未来执行,需要atd系统后台进程
首先检查atd进程是否启动:
命令:service atd status
[root@admin /]# service atd status
Redirecting to /bin/systemctl status atd.service
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2021-08-13 08:55:11 CST; 7h ago
Main PID: 1247 (atd)
Tasks: 1
Memory: 0B
CGroup: /system.slice/atd.service
└─1247 /usr/sbin/atd -f
8月 13 08:55:11 admin systemd[1]: Started Job spooling tools.
启动atd服务
[root@centos61 桌面]# service atd start 正在启动 atd: [确定]
常用指令:at安排延时服务
只运行一次
具体使用方法:
举例1:
两分钟后自动执行
[root@admin /]# at now+2 minutes
at> wall hello world
at> <EOT>
job 7 at Fri Aug 13 16:48:00 2021
ctrl+d中断输入
举例2:
跟具体时间
at 16:39 dec 10
时间+月+日若不加月日,默认今天
atq:查询当前的等待任务
[root@admin /]# atq
3 Fri Aug 13 16:43:00 2021 a root
4 Fri Aug 13 16:44:00 2021 a root
atrm:删除等待任务
语法:atrm 任务编号
[root@admin /]# atrm 3
[root@admin /]# atq
4 Fri Aug 13 16:44:00 2021 a root
2.cron服务
cron的优点就是能够周期性的执行某个命令
命令:
crontab -e
编辑当前用户的cron表
crontab -l
查看当前用户的cron表
crontab -r
删除当前用户的cron进程
crontab -u
用户名 以某用户的身份来控制cron表
使用crontab -e
编辑当前用户的cron表后会出现一个vi文件,会直接进入到vi编辑界面。
cron的语法:
左边是时间,右边是运行的命令
、* * * * * wall hello everyone
这5个代表了时间和日期:分时日月星
第一个 代表了小时的第几分钟:minute 范围 0~59
第二个代表了一天的第几个小时:hour 范围 0~23
第三个代表了每月的第几个日:day-of-month 范围 1~31
第四个代表了每年的第几个月:month-of-year 范围1~12
第五个代表了每周的星期几:day-of-week 范围 0~6,0代表周日
语法:
f1 f2 f3 f4 f5 program
注意:
在f1处 */n
时表示每n分钟执行一次
在f2处 */n
时表示每n小时执行一次 以此类推
例1:如果我要表示9月10日25分执行ls var/spool/cron任务怎么表示?
25 * 10 9 * ls var/spool/cron
没设小时则为每小时执行一次
例2:我要在每周日,每分钟执行wall Hello redking.blog.51cto.com这个命令,时间怎么表示?
*/1 * * * 0 wall Hello redking.blog.51cto.com
例3:每晚的21:30重启apache。
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
例4:晚上11点到早上7点之间,每隔一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
例5:每月的4号与每周一到周三的11点重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
例6:每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “haha”
20 0-23/2 * * * echo "haha"
例7:在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
星期的英文:
Monday——星期一
Tuesday——星期二
Wednesday——星期三
Thursday——星期四
Friday——星期五
Saturday——星期六
Sunday——周日
月的英文:
January 一月
February 二月
March 三月
April 四月
May 五月
June 六月
Junly 七月
August 八月
September 九月
October 十月
November 十一月
December 十二月