您的位置:首页 > 运维架构 > Linux

linux 计划任务

2017-05-10 23:07 288 查看
at option TIME

如果都没有全都拒绝普通用户
 option

time

周期性任务计划cron
系统维护作业etccrontab 详情参见 man 5 crontab

用户cron 任务crontab 命令

控制用户执行计划任务etccronallowdeny

时间表示法

-
时间格式

系统的计划任务

实例
anacron 系统

秒级别运行任务

at与crontab对比

管理临时文件
配置文件

命令

run-parts dir 执行dir下所有脚本

sleep单位s秒 默认

vipw vi etcpasswdvigr pwck grpck

at [option] TIME

通过rpm -ql at可知at依赖于/etc/rc.d/init.d/atd服务,使用前需要确认服务是否已开启;

centos7
是否开机启动
systemctl is-enabled atd.service
是否目前启动状态
systemctl status atd.service
centos6
是否开机启动
chkconfig --list atd
chkconfig atd on
是否目前启动状态
service atd status


at 队列存放在/var/spool/at 目录中

白名单:/etc/at.allow默认不存在,只有该文件中的用户才能执行at 命令

黑名单:/etc/at.deny默认存在,拒绝该文件中用户执行at 命令, 而没有在at.deny文件中的使用 者则可执行

如果 两个文件都不存在有 ,只root行可以执行 at命令

==at.deny,allow文件优先级高,有此文件,deny无效,只有此文件中的用户可使用at;

deny文件优先级低,此文件中的用户拒绝,不在此文件允许;

如果都没有,全都拒绝普通用户

 option

optionscomplications
-l列出指定队列中等待运行的作业;相当于atq
-d删除指定的作业;相当于atrm
-c查看具体作业任务
-f/path/from/somefile :从指定的文件中读取任务
-m当任务

time

HH:MM [YYYY-mm-dd]
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


周期性任务计划cron

rpm -ql cronie 可知需要/etc/rc.d/init.d/crond提供服务

cronie: 主程序包,提供crond 守护进程及相关辅助工具

cronie-anacron :cronie 的补充 程序,用于 监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

crontabs :包含CentOS 提供系统维护任务

日志:/var/log/cron

任务文件var/spool/cron

CentOS 7:

systemctl status crond

CentOS 6:

service crond status

系统维护作业/etc/crontab( 详情参见 man 5 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 executed
例如:晚上9 点10 分运行echo 命令;
10 21 * * * centos /bin/echo "Howdy!"


用户cron 任务:crontab 命令

-l列出当前用户的计划任务

-u user: 仅root 可运行,指定用户管理cron 任务

-r删除当前用户的计划任务

-ru user1删除用户1的计划任务

-lu user1列出user1的计划任务

-eu user1 以user1的身份编辑计划任务

-i :同-r 一同使用,以交互式模式移除指定任务

#非交互式实现
echo '*/2 * * * * wall test'|crontab
#列出hacker用户的计划任务
crontab -lu hacker


控制用户执行计划任务/etc/cron.{allow,deny}

默认只有cron.deny,allow文件优先级高,有此文件,deny无效,只有此文件中的用户可使用cron;

deny文件优先级低,此文件中的用户拒绝,不在此文件允许;

如果都没有,全都拒绝普通用户

时间表示法

特定值

给定时间点有效取值范围内的值

*

给定 时间点上有效取值范围内的所有值

表示 “每…”

离散取值

,#,

连续取值

-

在指定时间范围上, 定义步长

/#: #即 即 为步长

示例:每 每3 小时echo 命令

0 /3 * * centos /bin/echo “howdy!”

时间格式

@reboot Run once after reboot.

@yearly 0 0 1 1 *

@annually 0 0 1 1 *

@monthly 0 0 1 * *

@weekly 0 0 * * 0

@daily 0 0 * * *

@hourly 0 * * * *

系统的计划任务

/etc/crontab

/etc/cron.d/ 配置文件

/etc/cron.hourly/ 脚本

/etc/cron.daily/ 脚本

/etc/cron.weekly/ 脚本

/etc/cron.monthly/

实例

每天的2点和12点整,将/etc备份至/testdir/backup目录中,保存的文件名称格式为“etcbak-yyyy-mm-dd-HH.tar.xz”

echo '* 2,12 * * * cp -a /etc /testdir/backup/etcbak-`date +%Y-%m-%d-%H`' |crontab
echo '* 2,12 * * * root cp -a /etc /testdir/backup/etcbak-`date +%Y-%m-%d-%H`' >> /etc/cron.d/backupetc


每周2, 4,7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”

echo '* * * * 2,4,7 root cp -a /var/log/messages /logs' >> /etc/cron.d/backupmessages


每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

echo "* 2 * * * root grep -E '^[SM]' /proc/meminfo >>/tmp/meminfo.txt " >> /etc/cron.d/meminfo


工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报

echo "*/10 * * * 1-5 root  for i in `df -P|tr -s ' '|cut -d' ' -f5|grep -o [[:digit:]]`;do [ "$i" -gt 2 ] && wall 'disk over 80%';done" >> /etc/cron.d/diskwall


anacron 系统

运行计算机关机时cron 不运行的任务,CentOS6 以后版本

取消anacron 服务,由crond 服务管理

对笔记本电脑、台式机、工作站、偶尔要关机的服务器及其它不一直开机的系统很重要对很有用

配置文件:/etc/anacrontab ,负责执行/etc/ cron.daily;/etc/cron.weekly ;/etc/cron.monthly 中系统任务。

cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1   5   cron.daily      nice run-parts /etc/cron.daily
7   25  cron.weekly     nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly        nice run-parts /etc/cron.monthly


字段1 :如果在这些日子里没有运行这些任务……

字段2 :在重新引导后等待这么多分钟后运行它

字段3 :任务识别器,在日志文件中标识

字段4 :要执行的任务

由/etc/cron.hourly/0anacron 执行

当执行任务时,更新/var/spool/anacron/cron.daily 文件的时间戳

秒级别运行任务

在每分钟的基础上循环执行

* * * * * for min in 0 1 2; do echo "hi"; sleep 20;
done


at与crontab对比

itematcrontab
Createat timecrontab -e
Listat -lcrontab -l
Detailsat -c jobnumN/A
Removeat -d jobnumcrontab -r
EditN/Acrontab -e
==对于cron 任务来讲,% 有特殊用途;如果在命令中要使用%, ,

则 需要转义。将% 放置于单引号 中,则可不用转义==

==没有被重定向的输出会被邮寄给用户==

==根用户能够修改其它用户的作业==

管理临时文件

CentOS6 使用/etc/cron.daily/tmpwatch 定时清除临时文件

CentOS7 使用systemd-tmpfiles-setup

配置文件:

/etc/tmpfiles.d/*.conf

/run/tmpfiles.d/*.conf

/usr/lib/tmpfiles/*.conf

/usr/lib/tmpfiles.d/tmp.conf

d /tmp 1777 root root 10d

d /var/tmp 1777 root root 30d

命令:

systemd-tmpfiles –clean|remove|create configfile

run-parts dir 执行dir下所有脚本

sleep单位s:秒, 默认

m: 分 分

h: 小时

d: 天

vipw vi /etc/passwd(vigr pwck grpck)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: