码迷,mamicode.com
首页 > 其他好文 > 详细

计划任务详解

时间:2019-03-03 20:35:05      阅读:554      评论:0      收藏:0      [点我收藏+]

标签:执行   屏蔽   kconfig   shell   发送   就会   特殊符号   自己   解析   

1,.并行运行

同时运行多个进程,提高效率,通常想要同时运行多个进程,只能后台运行。

方法1

vi all.sh 把下面的语句写在shell脚本中,
f1.sh&
f2.sh&
f3.sh&

方法2

(f1.sh&);(f2.sh&);(f3.sh&)

方法3

{ f1.sh& f2.sh& f3.sh& }

需要注意,这些命令一旦开始执行,都是在后台的,需要用Kill等手段才能关闭!!

2.linux计划任务

主要用于解决,定时任务。

at

用于在未来的某时间点执行一次任务
如果是最小安装,需要安装装 at 包 ,如果at服务不是启动状态,需要使用service start 启动他。

systemctl status atd 确保at是running状态 (centos7)
service atd status 确保at是running状态(centos6)
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户,所以在作业中尽量屏蔽这些输出,否则可能造成大量的垃圾邮件。

at命令:at[option] TIME
常用选项:

  • -V 显示版本信息
  • -l 列出指定队列中,等待运行的队列,相当于atq
  • -d 删除指定的作业任务,相当于atrm
  • -c # 查看具体#号作业任务
  • -f /path/from/somefile:从指定的文件中读取任务
  • -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

TIME:定义出什么时候进行 at 这项任务的时间
可用的格式

  • HH:MM [YYYY-mm-dd] (02:00 在今天的02:00 执行,如果这个时间过了,就推迟到明天的这个时刻。)
  • noon, midnight, teatime(4pm)
  • tomorrow 明天
  • now+#{minutes,hours,days, OR weeks} 当前时间加上一个时间

时间格式案例

HH:MM 02:00
在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
HH:MM YYYY-MM-DD 02:00 2016-09-20
规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某个时间点再加几个时间后才进行该项任务
now + 5 minutes
02pm + 3 days

at的执行任务方式:
1)交互式
比如:键入at 17:00。表示操作在17:00点执行,输入完成后会进入类型多行重定向的模式
at> rm /data/* -fr
at> reboot
删除data下所有数据,并重启,设置完成后按ctrl + D 结束设置,会出现EOT的标识,说明设置成功。如果设置的时间已经过了,就会在第二天的这个时间执行
2)输入重定向
at now + 2minutes < at2.txt 这样表示2分钟后执行at2.txt中的操作
echo aaa | at now + 1min 管道也可以连接使用计划任务
3)at –f 文件
at -f file1 让他执行f1文件

at依赖与atd服务,需要启动才能实现at任务。
at队列存放在/var/spool/at目录中,**设置的定时任务,都会已文件的形式,存放在本地**
/etc/at.{allow,deny}控制用户是否能执行at任务
 白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
 黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
 **如果两个文件都不存在,只有 root 可以执行 at 命令**

默认普通用户也是可以执行计划任务的,但是我们可以通过黑名单和白名单来控制使用计划任务的用户
白名单的优先级比黑名单高,如果存在白名单,就优先使用白名单了,而不去判断黑名单 

时间同步

在真实的生成环境中,时间的同步位重中之重,当服务器时间出现问题,会造成无法预估的错误与损失,所以自动同步时间很重要。如果时间不同步,则定时任务的执行也会遇到问题。

自动同步时间操作

Centos7

vim /etc/chrony.conf (centos7) 设置时间同步配置文件 ,在
技术图片

这个默认行前面加上以下格式:

server 172.20.0.1 (表示ntp服务器地址,用于同步时间,要可以ping通且启动了ntp服务的地址) iburst

设置完成后,使用命令同步一次该服务器 ntpdate 172.20.0.1
然后开启服务,这样以后系统就会使用刚才配置的文件中的地址来自动进行时间同步
systemctl enable chronyd
systemctl start chronyd
工作中必须确保时间一致

Centos6

vim /etc/ntp.conf 设置时间同步配置文件
技术图片

设置完成后,和centos一样, ntpdate 172.20.0.1 操作一次,然后开启服务
chkconfig ntpd on
service ntpd start

周期性计划任务 cron

周期性任务计划:cron,用于控制一个命令周期,循环执行。
相关的程序包:

  • cronie: 主程序包,提供crond守护进程及相关辅助工具
  • cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
  • crontabs:包含CentOS提供系统维护任务

  • 代表每的意思,0才代表执行一次

**比如
0 2 * * * root cmd 表示每天的2点执行一次
但是

  • 2 * * * root cmd 表示的是每天的2点的每分钟都执行一次,就是每天执行60次**

在执行cron前,要确保该包已经安装,且守护进程处于运行状态。
确保crond守护处于运行状态:
CentOS 7:

  • systemctl status crond

CentOS 6:

  • service crond status

cron区分

系统cron任务:系统维护作业

  • /etc/crontab

用户cron任务:

  • crontab命令

日志:/var/log/cron

计划任务格式

/etc/crontab 计划任务书写案例 和配置 用于root用户,系统,来填写
配置中 * 代表每天都执行
对应的单位分别是
分 时 天 月 周 用户名 cmd(要执行的任务)

工作日的凌晨2点,执行打包任务,将/etc/* 打包到 /data/etcback+date ,标准输出要屏蔽掉,否则会发邮件

0 2 * * 1-5 root tar Jcvf /data/etcdate +%F.tar.xz /etc/* &>dev/null

1,10,20 每月1,10,20号执行 0,6 周日周六执行

30 4 1,15 * 5 如果这样填写,那么日期和周并不是且的关系,而是或的关系,执行效果为 : 在每个月1号或者15号,加上每个月的礼拜五,在早上4.30都会执行。

如果非要每个月的1,10,20执行,并且要是星期一 ,那么只能在后面调用的sh脚本中增加判断 ,如果不是周一就退出。

*/10 表示每10分钟执行一次

还可以支持特定时间格式
@reboot root cmd 当重启的时候自动执行命令,重启表示是下次启动的时候执行,而不是执行reboot命令的时候执行

cat /var/log/cron cron日志文件

crontab 普通用户用来创建计划任务的命令

crontab 创建计划任务,不需要写用户名,他会自动指定当前用户为该任务的创建者

crontab -l -u wang 查看wang用户的计划任务

ll /var/spool/cron 下存放crontab创建的计划任务,分别对应了创建用户的用户名文件

配置文件上其实有特殊权限,才能让普通用户间接修改该文件

黑名单只是禁止用户创建新的计划任务,原来的计划任务还是会继续执行

crontab -e 创建计划任务,普通用户也能使用。不需要加用户名,格式为

          • cmd 分 时 天 月 周(1-7)

移除计划任务

crontab -r -u wang 删除wang用户的所有计划任务

reboot root reboot 无限重启计划任务

centos7 按e 进入系统 加入 rd.break 不要按回车

选择启动菜单
boot menu kernel e
找到linux16 尾部加 rd.break
Ctrl + x 保存重启
mount -o remount,rw /sysroot
vim /sysroot/etc/crontab

centos6 救援
a
加空格 1 enter
启动后将/etc/crontab 中的无限重启删除
删除保存后
init 5 切换回原来的模式即可

run - parts 运行特定目标下的所有脚本

在以下目录下的脚本,cron会根据规则自动执行

/etc/cron.d/ 相当于cron的子配置文件。这个目录下也可以放cron操作的文件,只要格式匹配就行。

cron.hourly 每个小时执行
cron.daily 每天执行
cron.weekly 每周执行
cron.monthly 每个月执行

anacron 系统 监控cron执行,
cat /etc/anacrontab 配置监控文件

1 5 cron.daily nice run-parts /etc/cron.daily 每天 开机五分钟后 检查cron.daily执行情况

Random_delay = 45 随机延时。第一个命令和第二个命令运行的间隔时间

CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件
CentOS7使用systemd-tmpfiles-setup服务实现

计划任务中的% 需要转义!!!

对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义,将%放置于单引号中,则可不用转义

touch /data/ date ‘+%F‘.log 即使这样写在cron中,还是无法解析。会有问题。

带特殊符号的(%) 还是写在bash脚本中,让cron调用执行,不要直接写在cron里面

如果想20秒执行1次,那么需要在脚本里写循环

或者写两个脚本,互相调用
f1 调用f2 休眠

vim f1.sh
cmd
sleep 20
f1.sh

调动自己 20秒执行一次

sleep 可以使用 0.2 休眠0.2

usleep 可以达到微秒级 1000 微秒 = 1 毫秒 1000毫秒 = 1秒

*/7 这样写不能达成每7分钟执行1次,因为60分钟除不尽,达不到

sleep 7m 休眠7分钟

计划任务详解

标签:执行   屏蔽   kconfig   shell   发送   就会   特殊符号   自己   解析   

原文地址:https://www.cnblogs.com/ddz-linux/p/10467174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!