++++++++++++++++++++++++++++++++++++++++++++++++
标题:Linux操作系统的计划任务内容:计划任务分为单次任务和周期性任务,周期任务分为系统级计划任务和用户级计划任务重点:重点掌握周期性计划任务,at单次任务作为了解内容,在本章最后进行简单介绍时间:2019年4月22日++++++++++++++++++++++++++++++++++++++++++++++++1. 计划任务分类定时任务分为单次计划任务和周期性计划任务周期性计划任务分为系统级周期任务和用户级周期任务2. 计划任务的特点(crond)[root@test ~]# ps aux |grep 'crond' |grep -v 'grep' //计划任务的进程root 1791 0.0 0.0 117296 1384 ? Ss 01:55 0:00 crond[root@test ~]# ll /var/log/cron //计划任务的日志-rw-------. 1 root root 11408 Apr 19 06:01 /var/log/cron注意:crond服务会每个1分钟对计划任务进行一次检查,以执行需要运行的计划任务计划任务执行时不会讲内容显示在终端上,而是通过邮件进行通知3. 系统级周期计划任务3.1 定义方式1[root@test ~]# vim /etc/crontab //默认该文件中没有任何计划任务,介绍了定义计划任务的格式# 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* * * * * root cd /home/ ; ls0 0 * * * root /bak_bash/mysql_bak.sh0 2 * * * alice run-parts /cron-test注意:计划任务的解读读到第一个"*"符号即可。生产环境中(服务器)的计划任务最高一般不会超过月,常见的是天。计划任务中提到的日和月是且的关系。计划任务中提到的日和星期是或的关系。3.2 定义方式2[root@test ~]# ls /etc/cron.hourly/0anacron[root@test ~]# ls /etc/cron.daily/cups logrotate makewhatis.cron mlocate.cron prelink readahead.cron tmpwatch[root@test ~]# ls /etc/cron.weekly/[root@test ~]# ls /etc/cron.monthly/readahead-monthly.cron例如:现在某个任务,需要每小时进行执行一次,可以直接将脚本放在/etc/cron.hourly/3.3 系统级计划任务流程[root@test ~]# ps aux |grep 'crond' |grep -v 'grep' //计划任务的进程没分中检查计划任务root 1791 0.0 0.0 117296 1384 ? Ss 01:55 0:00 crond[root@test ~]# cat /etc/crontab[root@test ~]# ls /etc/cron.hourly/0anacron[root@test ~]# cat /etc/crontab //该脚本会启动一个进程,该进程存在一个配置文件/usr/sbin/anacron -s[root@test ~]# cat /etc/anacrontab1 5 cron.daily nice run-parts /etc/cron.daily7 25 cron.weekly nice run-parts /etc/cron.weekly@monthly 45 cron.monthly nice run-parts /etc/cron.monthly问题:如何能够确认计划任务在定义的时间之内被执行过呢????[root@test ~]# ll /var/spool/anacron/ //对应到anacrontab进程的JOB ID-rw-------. 1 root root 9 Apr 19 04:12 cron.daily-rw-------. 1 root root 9 Apr 19 03:18 cron.monthly-rw-------. 1 root root 9 Apr 19 04:32 cron.weekly[root@test ~]# cat /var/spool/anacron/cron.daily 201904194. 用户级计划任务[root@test ~]# ll /var/spool/cron/root //root用户的计划任务文件[root@test ~]# crontab -u mysql -e //编辑几家任务[root@test ~]# crontab -u mysql -l //查看计划任务* * * * * cd /home/ ; ls[root@test ~]# mail //确认计划任务已经执行[root@test ~]# crontab -u mysql -r //清除计划任务注意:与系统计划任务略有不同,不需要指定用户去执行* * * * * /mysql_bak.sh //每分钟执行一次0 * * * * /mysql_bak.sh //每小时执行一次0 2 * * * /mysql_bak.sh //每天2:00执行一次0 2 1 * * /mysql_bak.sh //每月1日2:00执行一次0 */2 * * /mysql_bak.sh //每个两个小时执行一次0 2 * * 0 /mysql_bak.sh //每月1日或每星期日执行一次5. at定时任务[root@test ~]# at now +2min //创建任务at> useradd aliceat> echo "alice" |passwd --stdin alicejob 2 at 2019-04-19 06:50[root@test ~]# atq root //任务查询2 2019-04-19 06:50 a root[root@test ~]# id aliceuid=501(alice) gid=501(alice) groups=501(alice)[root@test ~]# at now +2minat> cd /home/;lsat> <EOT>job 3 at 2019-04-19 06:52[root@test ~]# atq root3 2019-04-19 06:52 a root[root@test ~]# atrm 3 //删除任务[root@test ~]# atq[root@test ~]# atq root