一、同步系统时间
在进行计划任务之前,一定要确保服务器的时间是准确无误的,否则将造成计划任务失败或者无法达到预期效果,尤其是在大规模的集群环境中,更显得尤为重要,所以我们首先要学会的就是同步服务器时间。
CentOS6:
ntpdate 172.x.x.x 将时间与服务器同步
vim /etc/ntp.conf 修改此文件
server 172.x.x.x iburst 添加此行
chkconfig ntpd on 下次开机自动启动ntpd服务
service ntpd start 打开ntpd服务
service ntpd status 检查ntpd服务状态
CentOS7:
ntpdata 172.x.x.x 将时间与服务器时间同步
vim /etc/chrony.conf 修改此文件
server 172.x.x.x iburst 加上此行
systemctl enable chronyd 下次启动自动打开chronyd服务
systemctl start chronyd 打开chronyd服务
systemctl status chronyd 检查chronyd服务状态
二、at命令
at命令用于指定一个定时任务,在某个特定的时间节点执行一次。at命令也可以用于删除已经设置好的定时任务,与at命令相关的命令有atq,atrm,batch命令。at和batch名均是从标准输入中或指定的文件中读取相关的命令,并在指定的时间运行对应的命令,其运行过程中使用的shell为/bin/sh。在运行at命令前,需要确保系统启动了atd服务。
在执行at命令前先确定at服务是否处于运行状态
centos7:
systemctl status atd # 确认处于active(running)状态
systemctl start atd # 如果服务未开启,请开启atd服务
与at命令相关的文件
- /var/spoll/at: 用户存储设置好的at任务的目录,可进入该目录删除相应的at任务
- /etc/at.allow: 记录着允许使用at命令的用户,只有在这个目录里的用户才能使用at
- /etc/at.deny: at命令的黑名单,在里面的用户不允许使用at命令
如果at.allow和at.deny文件不存在,则只有root用户才允许使用at命令
at.allow文件的优先级大于at.deny文件
at命令的使用方式
- 常用选项
-f:指定包含具体指令的任务文件;
-q:指定新任务的队列名称;
-l:显示待执行任务的列表;
-d:删除指定的待执行任务;
-m:任务执行完成后向用户发送E-mail。
参数
日期时间:指定任务执行的日期时间。
实例
例1:三天后的下午 5 点锺执行/bin/ls
[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at> <EOT>
job 7 at 2018-01-08 17:00
例2:明天17点钟,输出时间到指定文件内
[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2013.log
at> <EOT>
job 8 at 2018-01-06 17:20
例3:使用atq命令来查看系统没有执行工作任务
[root@localhost ~]# atq
8 2018-01-06 17:20 a root
7 2018-01-08 17:00 a root
例4:删除已经设置的任务
[root@localhost ~]# atq
8 2018-01-06 17:20 a root
7 2018-01-08 17:00 a root
[root@localhost ~]# atrm 7
[root@localhost ~]# atq
8 2018-01-06 17:20 a root
例5:显示已经设置的任务内容
[root@localhost ~]# at -c 8
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22此处省略n个字符
date >/root/2018.log
三、crontab
而crontab命令是用于设置、移除或显示相关为crond守护进程服务的周期性任务。Linux系统默认会安装crond守护进程, 并在开机的时候自动启动。每个用户属于自己的crontab,并且保存在/var/spool/cron目录下。
在执行crontab命令前先确定at服务是否处于运行状态
setvice crond status # 查看crond的服务状态
service crond start # 启动服务
service crond stop # 关闭服务
service crond restart # 重启服务
service crond reload # 重新载入配置
Linux下的任务调度分为两类:系统任务调度和用户任务调度。
- 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
内容如下
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
# run-parts
前三行分别定义了crontab任务执行时使用的shell、环境变量及邮件的收件人。
其后的注释介绍了crontab任务的使用格式及各个选项的含义。
接着紧跟的四行周期性任务,分别代表每小时、每天、每周、每月运行一次的周期任务,
其执行身份为root,并且使用run-parts bash脚本抓取随后紧跟的目录下的脚本来执行。
2.用户任务调度
用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:
- /etc/cron.deny 该文件中所列用户不允许使用crontab命令
- /etc/cron.allow 该文件中所列用户允许使用crontab命令
- /var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
crontab的使用方法
- 常用选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
参数
crontab文件:指定包含待执行任务的crontab文件。
实例
例1:每1分钟执行一次command
* * * * * command
例2:每小时的第3和第15分钟执行
3,15 * * * * command
例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command
例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
例5:每个星期一的上午8点到11点的第3和第15分钟执行、
3,15 8-11 * * 1 command
例6:每晚的21:30重启passwd
30 21 * * * /etc/init.d/passwd restart
例7:每月1、10、22日的4 : 45重启passwd
45 4 1,10,22 * * /etc/init.d/passwd restart
例8:每周六、周日的1:10重启passwd
10 1 * * 6,0 /etc/init.d/passwd restart
例9:每天18 : 00至23 : 00之间每隔30分钟重启passwd
0,30 18-23 * * * /etc/init.d/passwd restart
例10:每周三凌晨三、五点10分执行脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
vim date.sh
#!/bin/bash
date +'%F %T'
10 3,5 * * 3 root /bin/bash date.sh