linux定时脚本编写,如何实现Linux定时任务描述
cron的软件包cronie
rpm -ql cronie
rpm –ql crontabs
最关键的是⼀个叫做crontab的命令,我们要书写的⾮系统定时任务就是通过此程序来编写的;
要保证crond.service服务有启动,cron定时任务才会⽣效:
systemctl status crond.service 查看crond服务状态;
systemctl enable crond.service 开机⾃动启动crond服务;
systemctl disable crond.service 开机禁⽌启动crond服务;
systemctl start crond.service 启动crond服务;
systemctl stop crond.service 停⽌crond服务;
systemctl restart crond.service 重启crond服务;
crontabs软件包提供了系统级别的定时任务的配置⽂件和⼀些初始状态的脚本,正常情况,我们不应该
去动这些脚本。特别是系统默认⾃带的东西,不要去修改他们,如果⼀定要⽤系统的定时任务,⽆⾮
是我们⾃⼰去按照规定去添加。
提交cron定时任务说明
向crond提交作业的⽅式不同于at,它需要使⽤专⽤的配置⽂件,此⽂件有固定格式,
不建议使⽤⽂本编辑器直接编辑此⽂件;要使⽤crontab命令;
cron任务分为两类:
1、系统cron任务
主要⽤来实现系统⾃⾝的维护;可以⼿动编辑修改/etc/crontab⽂件
2、⽤户cron任务
通过crontab命令(⼀个带有SUID权限的⼯具)增删改查;
系统定时任务配置⽂件
查看配置⽂件/etc/crontab
说明:
1. 如果定义的cron任务有多个,每⾏写⼀个,共7个字段;字段分别为,
分 时 ⽇ ⽉ 周 user-name表⽰⽤户名, 后边表⽰要执⾏的命令或脚本;
2. 由于这⾥的环境变量PATH定义的可选值与系统bash接⼝略有差别,这⾥范围更⼩,
所以建议,定义定时任务中⽤到的命令建议使⽤绝对路径,或者⾃定义PATH环境变量;
crontab命令选项和说明
crontab的常建语法结构和选项:
crontab [-u user] [-l | -r | -e] [-i]
-e:编辑当前⽤户的或者指定⽤户的crontab,如果没有定时任务,会作为⼀个新的⽂件编辑,编辑默认是以vi编辑器来编辑,可以通过显式设定VISUAL或EDITOR环境变量来修改使⽤指定的编辑器来编辑。⼀但编辑的crontab保存退出后,crontab会⾃动被安装成定时任务计划。
⽐如:
export EDITOR="/usr/bin/nano" 或 export EDITOR="/usr/bin/emasc",然后再去crontab -e
nano和emacs都是⽂本编辑器,默认都是没有安装的,需要⾃⼰⼿动指定安装。
-l:列出当前⽤户或者指定⽤户的crontab到标准输出。
-r:移除当前⽤户或者指定⽤户的所有定时任务,即删除/var/spool/cron/USERNAME⽂件;(危险,没有交互式操作提⽰)
-i:在使⽤-r选项移除所有任务时提⽰⽤户确认信息;
-u user:指定管理给定⽤户的crontab,只有超级管理员⽤户才能管理,普通⽤户不能使⽤此选项;
⼩技巧和注意事项:
1、如果不想把定时任务运⾏结果通知给指定⽤户
COMMAND > /dev/null 标准错误信息还是会以邮件的形式通知给⽤户;
COMMAND &> /dev/null 所有输出信息都不会以邮件的形式通知⽤户;
2.定义COMMAND时,如果命令需要⽤到%,需要对其转义;但放置于单引号中的%不⽤转义亦可;
3.某任务在指定的时间因关机未能执⾏,下次开机不会⾃动执⾏;
4.如果期望某时间因故未能按时执⾏,下次开机后⽆论是否到了相应时间点都要执⾏⼀次,可使⽤anacron实现;
crontab配置定时任务时候的时间表⽰
时间格式⼀共5位,分别对应:
* * * * *
分 时 ⽇ ⽉ 周
分钟有效值:0 - 59;
时的有效值:0 - 23;
⽇的有效值: 1 - 31;
⽉的有效值:1 - 12 或 jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec;
周的有效值:0 - 6 ,星期天可以⽤0或7表⽰,这个是个特例,也可以⽤周的英⽂缩写,
sun,mon,tue,wed,thu,fri,sat
· 指定特定值
给定时间点有效取值范围内的值;
注意:day of week和day of month⼀般不同时使⽤;
例如:
3 * * * *:执⾏频率为 每⼩时执⾏⼀次;每⼩时的第3分钟执⾏;
linux循环执行命令脚本3 4 * * 5:执⾏频率为 每周执⾏⼀次;每周5的4点3分执⾏;
5 6 7 * *:执⾏频率为 每⽉执⾏⼀次;每⽉的7号的6点5分执⾏;
7 8 9 10 *:执⾏频率为 每年执⾏⼀次;每年的10⽉9号8点7分执⾏;
· 取所有值
给定时间点上有效取值范围内的所有值;表⽰"每xxx"的含义;
· 离散取值
在时间点上使⽤逗号分隔的多个值;
x,y,z
例如:
0 8,20 * * 3,7:这种不建议;(出现了20号,⼜出现了每周3,周天);
9 8 * * 3,7:每周三和周⽇执⾏的8点9分执⾏;
· 连续取值
在时间点上使⽤符号短破折号"-"连接开头和结束
x-y
例如:
0 9-18 * * 1-5:周1到周5,每天的9点到18点,执⾏;(假设上午9点上班,下午18点下班,双休,这就是⼯作⽇执⾏要执⾏的任务)
· 步长取值
在指定时间点上,定义步长:
/number :其中number表⽰步长;
指定的时间点不能被步长整除时,其意义将不复存在;
最⼩时间单位为"分钟",想要完成"秒"级别任务,需要额外借助于其他机制,例如
可以定义每分钟定时计划任务,再利⽤脚本实现在每分钟之内,循环执⾏多次;
例如:
*/5 * * * *:每5分钟执⾏⼀次;
* */1 * * *:每1⼩时执⾏⼀次;
* * */5 * *:每5天执⾏⼀次;
*/7 * * * *:这个并不完全是每7分钟执⾏⼀次,这种不整除的现象,不建议使⽤。
cron定时任务⽰例
1、每12⼩时备份⼀次/etc⽬录⾄/backups⽬录中,保存⽂件 名称格式为""要添加的任务计划为:
* */12 * * * /usr/bin/mkdir -p /backups >/dev/null && /usr/bin/tar -JPcvf /backups/etc-`date '+%Y-%m-%d-%H'`. /etc >/dev/null
*
2、每周2、4、7备份/var/log/secure⽂件⾄/logs⽬录中,⽂件名格式为"secure-yyyymmdd";
要添加的任务计划为:
* * * * 2,4,7 /usr/bin/mkdir -p /logs >/dev/null && tar -JcvfP /logs/secure-`date +%Y%m%d`. /var/log/secure
>/dev/null
3、每两⼩时取出当前系统/proc/meminfo⽂件中以S或M开头的⾏信息追加⾄/⽂件中;
* */2 * * * /usr/bin/grep -E '^(S|M)' /proc/meminfo >> /
4、制定每周三凌晨三、五点10分执⾏某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00;
我的脚本内容为:
[root@node2 ~]# cat /var/tmp/print_dtime.sh
#! /bin/bash
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LANG="en_US.UTF-8"
export PATH LANG
source /etc/profile
shopt -u expand_aliases #关闭 bash alias 扩展
echo `date +'%Y-%m-%d %H:%M:%S'`
[root@node2 ~]#
定时任务计划为:
10 3,5 * * 3 bash /var/tmp/print_dtime.sh
打开APP阅读更多精彩内容
点击阅读全⽂
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论