本文共 2600 字,大约阅读时间需要 8 分钟。
linux任务计划,周期性的任务执行
未来的某个时间点执行一次任务:at,batch
周期性的运行某个任务:cron
电子邮件服务:
smtp:simple mail transmission protocol,用于传输邮件:
pop3:post office protocol
imap4:Internet mail access protocol
mailx -send and receive internetl mail
mailx -s "hi" root
at命令
at 17:10
输入要定时执行的命令后输入ctrl+d完成
time
HH:MM
noon,midnight,teatime
tomorrow
now+#{minutes,hours,days,OR weeks}
at now+3minutes
at -l或者atq等待运行的作业
at -d 1删除作业
atrm 1删除作业
at -c 1具体的作业任务
-f /path/from/somefile.指定文件中读取任务
batch命令
让系统自动选择空闲时间去执行指定的任务;
周期性任务计划:
相关程序包:
cronie:主程序,提供crod进程及相关辅助工具
cronie-anacron:用于监控任务执行状况:如果任务没有在指定的时间点运行,则anacron会在随后启动一次此任务
crontabs:包含了Centos提供系统维护任务;
确保crond已经启动
centos7:systemctl status crond
centos6:service crond status
计划要周期性执行的任务需要提交给crond,由其来实现到点运行。
系统cron任务:
/etc/crontab
用户cron任务:
crontab命令
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
例子:晚上9点10分运行echo命令
10 21 * * * root /bin/echo "hi"
时间表示法:
(1)特定值:
给定时间点有效范围内的值;
(2)*
给定时间点上有效取值范围内的所有值;
表示“每。。。”
(3)离散取值:,
#,#,#
(4)连续取值:-
#-#
(5)在指定时间范围上,定义步长:
/#:#为步长
*/3
没3小时echo命令
0 */3 * * * root /bin/echo "hi"
用户cron:
crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/username
crontab -e 编辑任务
crontab -l 列出任务
crontab -r 移除所有任务
crontab -i 交互式模式让用户有选择的移除任务
crontab -u user :仅root可以运行,代为为指定用户管理cron任务
crontab -u oracel -e
加任务:
crontab -e
0 */1 * * * command
0 */2 * * * command
查询任务是否加了:
crontab -l
0 */1 * * * command
0 */2 * * * command
基本格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache