欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

计划任务cron

程序员文章站 2023-10-31 11:26:40
cron 计划任务 作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据Schedule one-time tasks with at. 一次性调度执行 atSchedule recurring jobs with cron. 循环调度执行 cronSchedule recurr ......

 cron 计划任务

作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据

schedule one-time tasks with at. 一次性调度执行 at
schedule recurring jobs with cron. 循环调度执行 cron
schedule recurring system jobs.
所有计划任务执行中的输出都会以邮件的方式发送给指定用户, 除非重定向

一次性调度执行 at [了解]


语法格式:
at <timespec>
now +5min
teatime tomorrow (teatime is 16:00)
noon +4 days
5pm august 3 2018

例1:
[root@centos7 ~]# at now +1min
at> useradd uuuu
at> <eot>
job 1 at sat mar 21 22:34:00 2015
[root@yang ~]# atq
3 thu mar 30 09:55:00 2017 a root
[root@centos7 ~]# id uuuu

例2:
[root@yang ~]# vim at.jobs
useradd u99
useradd u00
touch /`date +%f`.txt
[root@yang ~]# at now +1min < at.jobs

注: sudo执行需要考虑tty问题

循环调度执行 cron


[root@centos7 ~]# systemctl status crond.service
[root@centos7 ~]# ps aux |grep crond
root 550 0.0 0.0 126300 1648 ? ss 10:05 0:00 /usr/sbin/crond -n
crond进程每分钟会处理一次计划任务


=====================用户级=====================
存储位置:
[root@centos7 ~]# ls /var/spool/cron/

管理方式:
crontab -l list the jobs for the current user.
crontab -r remove all jobs for the current users.
crontab -e edit jobs for the current user.
管理员可以使用 -u username, 去管理其他用户的计划任务

禁止其他用户使用计划任务
/etc/cron.deny:
alice
jack
[alice@yang ~]$ crontab -e
you (alice) are not allowed to use this program (crontab)
see crontab(1) for more information

语法格式 job format:
minutes hours day-of-month month day-of-week command

# 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
# | | | | |
# * * * * * command

0 2 * * * /mysql_back.sh
0 2 14 * * /mysql_back.sh
0 2 14 2 * /mysql_back.sh
0 2 * * 5 /mysql_back.sh
0 2 * 6 5 /mysql_back.sh
0 2 2 * 5 /mysql_back.sh
0 2 2 6 5 /mysql_back.sh

*/5 * * * * /mysql_back.sh
0 2 1,4,6 * * /mysql_back.sh
0 2 5-9 * * /mysql_back.sh

* * * * * /mysql_back.sh
0 * * * * /mysql_back.sh
* * 2 * * /mysql_back.sh

示例:
00 02 * * * ls //每天2:00整
00 02 1 * * ls //每月1号2:00整
00 02 14 2 * ls //每年2月14号2:00整
00 02 * * 7 ls //每周日2:00整
00 02 * 6 5 ls //每年6月的周五2:00整
00 02 14 * 7 ls //每月14号2:00整 或者 每周日2:00整,这两个时间都执行
00 02 14 2 7 ls //每年2月14号2:00整 或者 每周日2:00整,这两个时间都执行

00 02 * * * ls //每天2:00整
* 02 * * * ls //每天2:00中的每一分钟
* * * * * ls //每分钟执行ls
* * 14 2 * ls //2月14号的每分钟 1440分钟

*/5 * * * * ls //每隔5分钟
00 02 1,5,8 * * ls //每月1,5,8号的2:00整
00 02 1-8 * * ls //每月1到8号的2:00整

=====================系统级=====================
临时文件的清理 /tmp /var/tmp
系统信息的采集 sar
日志的轮转(切割)logrotate
通常不是由用户定义

定义位置一:
[root@centos7 ~]# vim /etc/crontab //该文件中默认没有定义任何计划任务
* * * * * user-name command to be executed

定义位置二:/etc/cron.d/*
[root@centos7 ~]# ls /etc/cron.d
0hourly raid-check sysstat

[root@centos7 ~]# cat /etc/cron.d/0hourly //该文件中定义的计划任务每小时会执行
01 * * * * root run-parts /etc/cron.hourly //每小时01分以root用户执行/etc/cron.hourly目录下所有脚本

crond: 仅仅会执行每小时定义的脚本 /etc/cron.hourly


每小时具体执行哪些脚本:
[root@centos7 ~]# ls /etc/cron.hourly/
0anacron 0yum-hourly.cron

[root@centos7 ~]# cat /etc/cron.hourly/0anacron
/usr/sbin/anacron -s

[root@centos7 ~]# vim /etc/anacrontab //该文件是anacron执行调用的文件
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

[root@yang ~]# ls /etc/cron.daily/
0yum-daily.cron logrotate man-db.cron mlocate
[root@yang ~]# ls /etc/cron.weekly/
[root@yang ~]# ls /etc/cron.monthly/

[root@centos7 ~]# ls /var/spool/anacron/
cron.daily cron.monthly cron.weekly
[root@centos7 ~]# cat /var/spool/anacron/cron.monthly
20170321

=====================cron log=====================
[root@centos7 ~]# tail /var/log/cron
mar 29 20:01:01 centos7 run-parts(/etc/cron.hourly)[22456]: finished 0anacron
mar 29 20:01:01 centos7 run-parts(/etc/cron.hourly)[22447]: starting 0yum-hourly.cron
mar 29 20:01:01 centos7 run-parts(/etc/cron.hourly)[22462]: finished 0yum-hourly.cron
mar 29 20:10:01 centos7 crond[22563]: (root) cmd (/usr/lib64/sa/sa1 1 1)
mar 29 20:20:01 centos7 crond[22688]: (root) cmd (/usr/lib64/sa/sa1 1 1)
mar 30 09:05:31 yang crond[1399]: (cron) info (syslog will be used instead of sendmail.)
mar 30 09:05:31 yang crond[1399]: (cron) info (random_delay will be scaled with factor 15% if used.)
mar 30 09:05:31 yang crond[1399]: (cron) info (running with inotify support)
mar 30 09:10:01 yang crond[1924]: (root) cmd (/usr/lib64/sa/sa1 1 1)
mar 30 09:20:01 yang crond[2109]: (root) cmd (/usr/lib64/sa/sa1 1 1)