计划任务
计划任务分为 一次性的和长期的计划at:一次性计划。执行该命令,得启动atd服务,而centos是默认启动的
crontab:长期计划,执行该命令,得启动crond服务
atd服务运行状态
[root@aubin aubin]# systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) 是否开机启动
Active: active (running) since 三 2020-12-09 18:10:00 CST; 48min ago 启动
Main PID: 5404 (atd)
Tasks: 1
CGroup: /system.slice/atd.service
└─5404 /usr/sbin/atd -f
12月 09 18:10:00 aubin systemd[1]: Started Job spooling tools.
at执行前,需要将一次性任务写入/var/spool/at/目录中,再配合atd服务到条件满足执行任务。
查看
[root@aubin aubin]# ls /var/spool
abrt abrt-upload anacron at cron cups lpd mail plymouth postfix
查看所有at命令所有配置文件
root@aubin aubin]# ls /etc/at.*
/etc/at.deny 该文件写入的用户名不可以使用at命令,而/etc/at.allow,该文件写入的用户才可以使用at命令
若两文件都不存在,则只有root用户可以使用at命令
at的使用
格式: at 时间
at > 命令/脚本
at > <EoT>
在定时任务中,命令还是脚本最好使用绝对路径
时间方式:now,minutes,hours,days,weeks,2020-12-17,15:18,tomorrow,today,yesterday
参数 | 说明 |
---|---|
-m | 当at的任务完成后,即发email通知使用者该任务已完成 |
-l | 列出目前系统上面的所有at计划 |
-d | 可以取消一个在at计划中的任务 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-q | 新任务的列队名称 |
-f | 从指定文件读入任务,而不是从标准输入读入 |
-t | 时间参数的形式提交要运行的任务 |
比如:
三天后的下午重启httpd服务 设置电脑于23:20关机 明天17点,输出时间到指定文件夹 在2020-01-13 14:16查看文件1.txt,并追加写入2.txt,删除1.txt
at 5pm+3days at 23:20 at 17:00 tomorrow at 14:16 14:16 2020-01-13
at > systemctl restart httpd at > reboot at > date >/root/2013.log at > cat 1.txt >>2.txt
at > <EoT> at > <EoT> at > <EoT> at > rm-rf 1.txt
at > <EoT>
crontab命令
crontab:循环计划任务
增加全局性的计划任务时,直接修改/etc/crontab。一般不建议这样做,可以把计划任务写入/etc/cron.d目录
例如,增加一项定时的备份任务,在/etc/cron.d目录下新建文件backup.sh,内容如下:
# m h dom mon dow user command
* 1 * * * root /sbin/mon_zetc_logtar.sh
cron进程执行时,就会自动扫描该目录下的所有文件,按照文件中的时间设定执行后面的命令。
cron执行时,也就是要读取三个地方的配置文件:一是/etc/crontab,二是/etc/cron.d目录下的所有文件,三是每个用户的配置文件
控制用户使用的权限文件:/etc/cron.allow ,/etc/cron.deny
crond服务的启动
service crond restart 启动crond服务
systemctl status crond 启动crond服务
systemctl enable crond 将crond服务加入启动项
/etc/cron.allow 写入该文件的用户是可以执行crontab命令的
/etc/cron.deny 写入该文件的用户不能执行crontab命令的
crontab的使用
在循环任务中,命令还是脚本最好使用绝对路径
时间方式:now,minutes,hours,days,weeks,2020-12-17,15:18,tomorrow,today,yesterday
参数 | 说明 |
---|---|
-u | 当at的任务完成后,即发email通知使 |
-e | 编辑某crontab任务的内容 |
-l | 查看crontab的任务内容 |
-r | 删除所有crontab的任务内容 |
查看全局性的计划任务
[root@aubin aubin]# 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
查看存放循环计划的文件
[root@aubin aubin]# ls /etc/cron.d/
0hourly raid-check sysstat
[root@aubin aubin]# ls /etc/cron.d/0hourly
/etc/cron.d/0hourly
[root@aubin aubin]# cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
/var/spool/cron
此目录下存放各个用户的任务文件。各个用户的任务存放在以自已用户名为文件名的任务文件中。
cat/var/spool/cron
[root@aubin aubin]# ls /var/spool
abrt abrt-upload anacron at cron cups lpd mail plymouth postfix
cron执行的每一项任务都会被记录到/var/log/cron 日志文件中
格式:分 时 日 月 周 任务内容(命令)
比如
每周一,周三,周五的凌晨3点25分打印hello world 到 /tmp/txt中
25 3 * * 1,3,5 echo ”Hello World!!!” > /tmp/txt”
指定每小时的第41分钟执行一次ls命令
41 * * * * ls
每1分钟执行一次myCommand
* * * * * myCommand
每小时的第3和第15分钟执行
3,15 * * * * myCommand
每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
每天7:50开启ssh服务
50 7 * * * /sbin/service sshd start
每月1号和15号检查/home 磁盘
0 0 1,15 * * fsck /home
参考文档
https://blog.nowcoder.net/n/e7cc270ed9ae4957971c37cd6a33cba4
https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html
https://blog.csdn.net/wangmx1993328/article/details/81235245