Linux任务计划

任务计划功能

未来的某时间执行一次任务,执行任务后退出!
	at	指定时间点,执行一次任务
周期性任务运行,将重复的操作变为一次操作自动运行
	cron

一次性任务:at

确认at包是否装上:

	[root@centos6 ~]#which at
	/usr/bin/at
	[root@centos6 ~]#rpm -qf /usr/bin/at 
	at-3.1.10-49.el6.x86_64

确认at服务是否启动:

	centos7:systemctl is-enabled atd
	centos6:chkconfig --list atd

at:执行一次性任务,如果有标准输出,会默认发邮件给用户

格式:at [option] TIME

常用选项

-V:版本信息
-l:列出指定队列中等待运行的任务相当于atq
-d:删除指定的任务
-c:查看具体任务内容
-f file:从指定的文件中读取任务
-t time:时间格式
-m:任务完成后,会给用户发邮件,即使没有数据,也会有一个空邮件

时间可定义为:

now+#{minutes,hours,days,weeks}:现在往后加多长时间执行一次任务

例:at now+10minutes
	at> echo aaa
	at>	<EOF>
	十分钟之后执行echo命令

创建任务时会自动创建文件:会创建一个随机编号的文件,关机重启任务也不会丢失

/var/spool/at/

允许或拒绝某用户使用计划任务

/etc/at.allow	:默认没有此文件,如果有此文件,就看文件中是否有此用户,有则可以设定计划任务,如果
			没有则不能定义计划任务,此文件优先级高,看了此文件不会再看deny文件,一行写一个用户

/etc/at.deny	:如果没有allow文件,那么在deny文件中的用户不能定义计划任务,此文件中的用户是拒
				绝使用计划任务的,一行一个用户
		如果两个文件都不存在,那么只由root用户可定义计划任务

run-parts  dir:指定目录,将目录下的可执行文件全部执行一遍

例:创建一次性任务,以邮件方式查看

[root@centos6 ~]#at 11:35
at> date
at> ls /root
at> echo 123123
at> <EOT>		输入命令后Ctrl+d键退出
job 2 at 2019-09-09 11:35

[root@centos6 ~]#at -l	
2       2019-09-09 11:35 a root	

也支持输入重定向方式
at 12:00 << EOF
echo 123
echo 354
EOF

周期性任务:cron

任务计划在单用户模式下是不执行的

确保crond守护进程处于运行状态

	centos7:systemctl status crond
	centos6:service crond status

计划周期性执行的任务提交给crond,到指定的时间会自动运行

系统cron任务:系统维护
	/etc/crontab

用户cron任务
	crontab命令生成

日志:/var/log/cron

基于配置文件的cron

/etc/crontab文件中的格式,仅root用户修改此文件
	# 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 0和7都是周日
	# |  |  |  |  |
	# *  *  *  *  * user-name command to be executed
	  分 时 天  月 周	 用户      命令
	*/10 *  *  *  *  root   /data/bin/checkdisk.sh	:每隔十分中就检查一次磁盘;*号表示每的意思,
													*/10表示每10分钟,其他的都是每小时,每天,每月
	 30  2 1,10,20 *  0  root  /data/check_disk.sh	:如果天和周都有定义,就是或的关系,这个例子是1,
	 												10,20号和周日的2点30分执行命令,如果想要1,10,20,
	 												并且是周日在执行,那就在脚本里写一个判断语句,
	 												date +%w判断是周几,返回的是数字
	 30  2  * 3-6,12  *  root  /bin/cat /var/log/messages	:3到6月和12月的每天2点30分以root用户
	 														身份执行命令
任务计划中的命令必须是命令的绝对路径,一般情况都是编辑好脚本,这里写脚本的绝对路径运行脚本的

时间表示法:

给予特定的值
*:给定时间点上取值范围内的所有值
#,#,#:离散取值,1,10,20,23天
#-#:连续取值,1-25天
*/#:步长取值,*/10每十分钟
@reboot:下次重启前执行,开机的时候删,关机不会删

/var/spool/cron/:crontab创建的任务文件存放点,以用户名为文件名的任务文件
/var/log/cron :计划任务的日志文件,CMD字段为执行过的命令。

基于命令创建的cron

crontab命令有SUID权限

用户创建任务计划:root也可以

crontab命令:通过类似VIM编辑器的界面编辑计划任务

-e:编辑
-u:仅root用户可运行,指定用户管理cron任务
-r:删除任务,全部删,要删单挑编辑文件
-l:列出cron任务

使用crontab -e创建的任务计划不需要指定用户,当前用户创建的任务

例:当前用户为root,执行crontab -e
	内容为:* * * * * /bin/cat /root/file1
	错误的:* * * * * root /bin/cat /root/file1	:如果中间加上了用户,它会认为root也是一条命令,
												当执行时,没有root命令。会报错
也可使用 crontab -u username -e:使用某用户身份为用户创建计划任务
	例:crontab -u cheng  -e 
	内容:* * * * * /bin/cat /root/file1
		既然已cheng用户身份创建,邮件也发到了cheng 用户的邮箱,root用户看不到,需要切换用户查看

控制用户权限执行任务
	/etc/cron.allow|deny
		同样的allow比deny优先级高,有了allow不会再看deny文件

cron特性

注意:任务执行命令的结果中的标准输出和错误会以邮件方式通知给用户
	
建议:创建脚本时多余的输出给/dev/null,要不一直发邮件,就会产生垃圾邮件

export EDITOR=vim:此项可以为crontab -e创建的任务中加颜色,保存至/etc/profile.d/#.sh

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

系统任务计划

centos6使用/etc/cron.daily/tmpwatch定时清理临时文件,定义了/tmp /var/tmp目录的清理时间

centos7使用systemd-tmpfiles-setup服务实现

配置文件

/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles.d/*.conf
命令:systemd-tmpfiles -clean|remove|create configfile
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值