at 单次任务
介绍
at可以设置一个指定的时间执行一个指定任务,只能执行一次,使用前需要确认系统是否开启了atd服务
常用参数
| 参数 | 说明 |
|---|---|
| -V | 显示版本信息 |
| o | 列出指定队列中等待运行的作用,相当于atq |
| -d | 删除指定的作业,相当于atrm |
| -f | 从/path/file中读取任务 |
| -m | 当任务完成之后,将给用户发送邮件,即使没有标准输出 ps:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户 |
定义执行时间
02:00 2016-09-2004pm March 1717:20 tomorrownow+5min02pm+3days02am+1weeks
注意事项
1.输入完成ctrl+d退出,不是ctrl+c
2.查看/var/spool/at目录中生成了一个文件
3.echo在at中无法在屏幕输出,以邮件方式发送
4./etc/at.{allow,deny}控制用户是否能执行at任务
白名单:/etc/at.allow默认不存在,只有该文件中的用户才能执行at命令
黑名单:/etc/at.deny默认存在,拒绝该文件中用户执行at命令,而没有在at.deny文件中的使用者则可执行<br /> 如果两个文件都存在,allow文件优先<br /> 如果两个文件都不存在,只有root用户可以执行at命令<br />5.需要安装包<br /> rpm -qi at #查看at包是否安装号<br /> rpm -ql at #查看at包列表文件<br /> ps -aux | grep atd #查看atd是否已经在运行<br />6.需要同步时间<br /> ntpdate
[root@lhuan spool]# ntpdate 172.20.0.1
10 Oct 10:41:01 ntpdate[30863]: the NTP socket is in use, exiting
创建任务
/var/spool/at任务所在文件夹
1.交互式
[root@lhuan ~]# at 11:08
at> date >/root/1.sh
at> <EOT>
job 10 at Sat Oct 10 11:08:00 2020
#执行结果
[root@lhuan ~]# cat 1.sh
Sat Oct 10 11:08:00 CST 2020
at now+1minutes (现在之后1分钟)
at> wall "class is over"
或
at 2:00 (计划任务日志输出隐藏)
at> tar cvf etc.tar /etc &> /dev/null
at 11:08
date >/root/1.sh
<EOT>
2 .重定向
at 2:00 <<EOF
tar cvf etc.tar /etc &> dev/null
wall "backup is finished"
EOF
计划任务可用多行重定向放在脚本中执行
3.读文件
at -f
cat atjob.txt |at 3:00
或
at -f atjob.txt 3:00 (利用f选项,成功会发送空文件)
还可以把以下内容写入文本atjob.txt中,直接执行文本
`tar cvf etc.tar /etc &> dev/null`
`wall "backup is finished"`
查看任务
at -l 查看任务列表等同于atq
at -c 5 查看5号任务
ls /etc/var/spool/at
[root@lhuan ~]# at -l
8 Sun Oct 11 10:50:00 2020 a root
You have new mail in /var/spool/mail/root
删除任务
at -d 8
或者
atrm -8
crond 周期任务
介绍
crond在linux下用来周期性地执行某种任务或者等待处理某些事件,eg:进程监控 、日志处理等。
当安装系统的时候会默认安装,并且会地总启动crond进程。
crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,就自动执行该任务。crond的最小调度单位为分钟。
分类
(1)系统任务调度
系统周期性所要执行的工作
eg:写缓存数据到硬盘、日志清理等。
系统任务调度的配置文件:/etc/crontab
[root@lhuan ~]# 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
前三行用来配置crond的任务运行的环境变量
第一行 SHELL变量指定系统要使用哪种shell
第二行 PATH变量指定了系统执行命令的路径
第三行 MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
后面的行表示使用的时间格式
(2)用户任务调度
用户定期要执行的任务
eg:用户数据备份,定时邮件提醒等。
用户可以使用crontab工具来定制自己的计划任务。
所有用户定义的crontab文件都被保存在/var/spool/cron目录中。文件名和用户名一致。
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,格式分为6个字段,前5个字段是时间设定段,第6个字段是要执行的命令段
minute hour day month week command
| 参数 | 说明 |
|---|---|
| minute | 表示分钟,可以是0-59之间的任何整数 |
| hour | 表示小时,可以是0-23之间的任何整数 |
| day | 表示日期,可以是0-31之间的任何整数 |
| month | 表示月份,可以是0-12之间的任何整数 |
| week | 表示星期几,可以是0-7之间的任何整数,0或7代表星期日 |
| command | 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件 |
- 时间表示法:
- 1.特定时间
- 在给定的时间范围内去有效的值
- 2.*
- 在给定的时候上去有效范围的所有制,’每……‘
- 3.离散取值
- 1,3,5,#,#……
- 4.范围值
- #-#
- 5.定义步长,在指定时间范围上,
- /# :每隔多长时间,#为步长
相关程序包
1.cronie: 主程序包,提供crond守护进程及相关辅助工具
2.cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
3.crontabs:包含CentOS提供系统维护任务
cronie文件
[root@lhuan ~]# rmp -ql cronie
-bash: rmp: command not found
[root@lhuan ~]# rpm -ql cronie
/etc/cron.d
/etc/cron.d/0hourly 每小时任务文件
/etc/cron.deny 黑名单文件
/etc/pam.d/crond
/etc/sysconfig/crond
/usr/bin/crontab #提交计划任务用的
/usr/lib/systemd/system/crond.service #服务守护进程
/usr/sbin/crond #创建任务用的
/usr/share/doc/cronie-1.4.11
/usr/share/doc/cronie-1.4.11/AUTHORS
/usr/share/doc/cronie-1.4.11/COPYING
/usr/share/doc/cronie-1.4.11/ChangeLog
/usr/share/doc/cronie-1.4.11/INSTALL
/usr/share/doc/cronie-1.4.11/README
/usr/share/man/man1/crontab.1.gz
/usr/share/man/man5/crontab.5.gz
/usr/share/man/man8/cron.8.gz
/usr/share/man/man8/crond.8.gz
/var/spool/cron #任务存放文件夹
开启服务
#设置开机自启
systemctl is-enabled crond -centos7
chkconfig --list crond -centos6
#查看服务状态
systemctl status crond centos7
service crond status centos6
#启动服务
systemctl start crond centos7
service crond start centos6
常用参数
| 参数 | 说明 |
|---|---|
| -e | 编辑任务列表 |
| -r | 删除目前的任务列表 |
| -l | 列出目前的任务列表 |
无限重启修复:/etc/crontab文件内填写reboot后
centos7:
1.按e键之后找到Linux16这行跳到行末net.inframes=0后面加rd.break
不要按回车,回车是换行。按ctrl+x(底下有提示,)
2.进入紧急救援模式,df可查看找到真正的根 (我这里是/sysroot)
3.cd /sysrootcd/
4.vi /sysroot/etc/crontab 修改 (wq!不让写入,输入mount命令可查看是否ro权限)
5.重新挂载更改rw权限
mount -o remount,rw /sysroot
6.vi /sysroot/etc/crontab 修改 (可以存盘退出了)
crontab 命令
[root@localhost ~]# crontab --help
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user #定义用户,仅root可进行,指定用户管理cron任务
-e edit user's crontab #编辑任务
-l list user's crontab #显示用户的任务计划
-r delete user's crontab #删除用户的任务计划
-i prompt before deleting #同-r 同使用,以交互模式让用户有选择地移除指定任务
-n <host> set host in cluster to run users' crontabs #设置机器加护任务
-c get host in cluster to run users' crontabs #获取机器
-s selinux context
-x <mask> enable debugging
ps:如果在cron任务有使用% 需要进行转义
例子
1每隔一分钟执行一次脚本 /opt/bin/test-cron.sh
*/1 * * * * root /opt/bin/test-cron.sh
2 在 12:01 a.m 运行,即每天凌晨过一分钟。这是一个恰当的进行备份的时间,因为此时系统负载不大。
1 0 * * * /root/bin/backup.sh
3 每个工作日(Mon – Fri) 11:59 p.m 都进行备份作业
59 11 * * 1,2,3,4,5 /root/bin/backup.sh
59 11 * * 1-5 /root/bin/backup.sh
注意事项
1.后面的文件要注意路径,用pwd进行查看一下
