Linux计划任务
计划任务
一次性任务计划:at,batch
周期性任务计划:cron
周期性任务计划:cron
依赖于后台服务,查看运行状态:
servicecrondstatus
crond(pid1680)isrunning…表示正在运行
cron任务有两类:
系统cron:/etc/crontab
用户cron:定义在/var/spool/cron/目录中与用户名同名的文件中
每行定义一个独立的任务:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
#Fordetailsseeman4crontabs
#Exampleofjobdefinition:
#.—————-minute(0-59)
#|.————-hour(0-23)
#||.———-dayofmonth(1-31)
#|||.——-month(1-12)ORjan,feb,mar,apr…
#||||.—-dayofweek(0-6)(Sunday=0or7)ORsun,mon,tue,wed,thu,fri,sat
#|||||
#*****user-namecommandtobeexecuted
时间点(周期性任务)
user-name:用户身分
command:要运行的任务
注意:建议在定义cron任务时,所用到的命令使用绝对路径;假如脚本,脚本中的命令使用绝对路径,或自定一个拥有完整路径的环境变量;
时间
分钟小时天月周几
注意:天月和周几通常不同时设置,由于所有时间点要同时满足
每年5月4号3点2分:2345*
每月6号18点20分:20186**
每晚9点20分:209***
每小时的3分时:3****
每分钟:*****
每周三17点16分:1617**3
时间表示法:每位时间位都应当使用其可用的有效取值范围内的值;*就用于表示使用其所有有效取值;
17****/bin/echo”howdy”每小时的17分时执行一次
89***/bin/echo”howdy”每晚的09:08执行
1617**3/bin/echo”howdy”每周三的17:16执行
*/#:在对应的时间位有效取值上每#个时间单位一次
*/3****/bin/echo”howdy”每晚每三分钟一次
9*/3***/bin/echo”howdy”每3小时的09分时一次
*/7****/bin/echo”howdy”
注意:并不能精确做到每7分钟一次;
连续时间点:-
403**1-5/bin/echo”howdy”每周1-5的3:40执行
离散时间点:,
302**2,4,6/bin/echo”howdy”每周的2,4,6的2:30执行任务运行后的结果:短信发送给任务相关用户;
遗弃电邮通知:输出重定向
COMMAND>/dev/null
COMMAND&>/dev/null
COMMAND>/dev/null2>&1
例:302**2,4,6/bin/echo”howdy”&>/dev/null
/dev/null:软件模拟出的设备,bitbucket,数据黑洞;
crontab命令
crontab命令:
-l:列举早已定义的所有任务;
-e:打开编辑界面定义任务;
-r:remove,移除所有任务;
-uUSERNAME:root以其他用户的身分运行crontab
-l:列举早已定义的所有任务;
-e:打开编辑界面定义任务;
-r:remove,移除所有任务;
crontab会检测句型,并保存在/var/spool/cron/用户名目录中
注意:删掉一个任务应当通过编辑界面删掉行实现;
注意:假如crontab中的用户命令中须要使用%时,须要对其进行通配符:
*****/bin/touchfile-$(date+%F-%H-%M-%S)
*****/bin/touchfile-$(date+'%F-%H-%M-%S')
加锁
当不确定一个cron任务是否会在下一次执行是执行完本次任务linux系统计划任务linux设置环境变量linux命令ls,可以考虑用加锁的机制不重复执行linux系统计划任务,而是执行完一次后在进行下一次。
例:
*/20****flock-xn/tmp/room_delete.lock-c'cd/www/;phproom_delete.php>/dev/null'