单次计划任务 at
at命令:at [option] TIME
-
常用选项:
-V 显示版本信息: -l 列出指定队列中等待运行的作业;相当于atq -d 删除指定的作业;相当于atrm -c 查看具体作业任务 -f /path/file 指定的文件中读取任务 -m 当任务被完成之后,将给用户发送邮件,即使没有标准输出 注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
-
TIME:定义出什么时候进行 at 这项任务的时间
02:00 2016-09-20 04pm March 17 17:20 tomorrow now+5min 02pm+3days 02am+1weeks
-
注意事项
-
输入完成ctrl+d退出,不要ctrl+c
-
查看/var/spool/at目录生成了一个文件
-
echo在at中无法在屏幕输出,以邮件方式发送
-
/etc/at.{allow,deny}控制用户是否能执行at任务
-
白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
-
黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
-
如果两个文件都存在,allow文件优先
-
如果两个文件都不存在,只有 root 可以执行 at 命令
-
-
需安装包:rpm
rpm -qi at 查看at包是否安装好 rpm -ql at 查看包文件列表 ps aux|grep atd 查看atd是否已经在运行
-
需同步时间:ntpdate
ntpdate 172.20.0.1
-
实战举例
-
创建任务(/var/spool/at/ 任务所在文件夹)
-
交互式:
at 10:15 (直接指定时间) at> wall "system will reboot" 或 at now+1minutes (现在之后1分钟) at> wall "class is over" 或 at 2:00 (计划任务日志输出隐藏) at> tar cvf etc.tar /etc &> /dev/null 建议计划任务尽量不要标准输出,以免硬盘慢慢被撑满
-
at -t 直接指定时间:
at -t 201808291030.30 (指定时间用-t)
-
重定向:
at 2:00 <<EOF tar cvf etc.tar /etc &> dev/null wall "backup is finished" EOF 计划任务可用多行重定向放在脚本中执行
-
读文件: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
-
删除任务
at -d 8 或 atrm 8
周期性计划任务 cron
相关程序包
-
cronie: 主程序包,提供crond守护进程及相关辅助工具
-
cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
-
crontabs:包含CentOS提供系统维护任务
cronie主程序包
-
准备工作
1) 了解cronie文件
rmp -ql cronie /usr/sbin/crond 创建任务用的 /var/spool/cron 任务存放文件夹 /etc/cron.deny 黑名单文件 /etc/crom.d/0hourly 每小时任务文件 /usr/lib/systemd/system/crond.service 服务守护进程 /usr/bin/crontab 是提交计划任务用的
3) 开机启动服务
systemctl is-enabled crond -centos7 chkconfig --list crond -centos6
4) 查看现在是否启动
systemctl status crond centos7 service crond status centos6
5) 启动一下
systemctl start crond centos7 service crond start centos6
配置文件解析
-
/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 excuted 30 2 * * 7 root /root/back.sh 注:每周日,2点30分,以root身份执行back.sh脚本 tar cf /data/etc`date +%F`.tar /etc/ &> /dev/null (写入back.sh脚本) 百分号%在文件内有特殊含义,不能这么用,需写在脚本里,直接执行脚本即可。 日期和星期是或的关系,如希望并且关系需在脚本内判断。 示例:每3小时echo和wall命令 0 */3 * * * centos /bin/echo “up Dadda!”;/usr/bin/wall “good study”
-
/etc/cron.d 配置文件夹
/etc/cron.d/dadda(每个用户可自建各自的配置文件) 同/etc/crontab书写格式
-
/etc/cron.hourly/ 文件夹(每小时调用文件夹内的脚本)
usr/bin/on_ac_power (可查看是否电源供电) echo $?
-
/etc/cron.daily/ 文件夹(每天的工作任务,每天的调用)
mlocat相当于updateddb
-
/etc/cron.daily/tmpwatch 清空临时脚本 (centos6才有)
(centos6是通过计划任务是现实)
(centos7是systemd-tmpfiles-setup通过服务实现) -
/etc/cron.deny 黑名单文件 (规则同at)
/etc/cron.allow 白名单文件
crontab命令 普通用户创建计划任务程序
-
创建任务:
crontab -e 创建计划任务(格式同/etc/crontab配置文件格式) * * * * * Dadda /bin/echo "Up Dadda!"
-
查看任务:
/var/spool/cron(创建完任务存在此目录) crontab -l -u dadda 看dadda计划任务 crontab -l 看自己计划任务 日志记录:/var/log/cron (误删可查看日志命令恢复) expoort EDITOR=vim 可以变成输出颜色 永久保存需:vim/etc/profile.d/env.sh expoort EDITOR=vim
-
删除任务
crontab -r 删除计划任务 crontab -r -i 删除之前询问 (如两个计划任务最好用i)
无限重启修复:/etc/crontab文件内填写reboot后
-
centos7:
-
按e键之后找到Linux16这行跳到行末net.inframes=0后面加
rd.break
不要按回车,回车是换行。按ctrl+x(底下有提示,) -
进入紧急救援模式,df可查看找到真正的根 (我这里是/sysroot)
-
cd /sysrootcd/
-
vi /sysroot/etc/crontab 修改 (wq!不让写入,输入mount命令可查看是否ro权限)
-
重新挂载更改rw权限
mount -o remount,rw /sysroot -
vi /sysroot/etc/crontab 修改 (可以存盘退出了)
-