at 一次性任务,执行完成将不再执行:
at由atd守护进程运行,at命令在以下软件包中
[root@foundation0 RHCE]# rpm -qf /usr/bin/at
at-3.1.13-17.el7.x86_64
查看服务是否启动:
[root@foundation0 mail]# systemctl status atd.service
atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)
Active: active (running) since Fri 2017-11-24 10:43:51 CST; 9h ago
Main PID: 761 (atd)
CGroup: /system.slice/atd.service
└─761 /usr/sbin/atd -f
Nov 24 10:43:51 foundation0.ilt.example.com systemd[1]: Started Job spooling tools.
at跟终端没有关系,在后台运行,如果shell终端关闭,不影响at任务的执行
有a-z 共26个队列,字母越靠后,优先级越低,a队列的优先级最高,z队列的优先级最低
at参数选项:
at [options] timespec
-f :指定包含具体指定的任务文件
-q :指定新任务的队列名称
-l :显示待执行的列表,同atq
-d :删除指定待执行的任务,同atrm
-m :任务执行完成后向用户发送邮件
timespce时间格式:(指定的日期必须跟在指定的时间的后面)
hh:mm
month day
mm/dd/yy
dd.mm.yy
now+5min +5hours +5days teatime(下午4点)
atq:查看队列中的任务列表
atrm:删除队列中的任务
[root@foundation0 at]# at now +3hours
at> echo "hello world"
at> <EOT>
job 4 at Fri Nov 24 22:43:00 2017
You have new mail in /var/spool/mail/root
[root@foundation0 at]# atq
4 Fri Nov 24 22:43:00 2017 a root :a表示队列a
[root@foundation0 at]# at now +1min
at> /usr/bin/touch /root/at.txt
at> <EOT>
job 5 at Fri Nov 24 19:46:00 2017
[root@foundation0 at]# atq
4 Fri Nov 24 22:43:00 2017 a root
5 Fri Nov 24 19:46:00 2017 a root
任务报告完成后会向执行的用户发送成功或失败邮件
root邮件目录:
[root@foundation0 mail]# cd /var/spool/mail/
[root@foundation0 mail]# pwd
/var/spool/mail
[root@foundation0 mail]# ls #以下文件是系统所有用户以用户名做为文件名的邮件信息
kiosk root rpc
atrm jobnum :删除要执行的任务:
[root@foundation0 mail]# atq
4 Fri Nov 24 22:43:00 2017 a root
[root@foundation0 mail]# atrm 4
[root@foundation0 mail]# atq
非交互式创建任务:
[root@foundation0 mail]# echo "systemctl start httpd" | at 23:30
job 6 at Fri Nov 24 23:30:00 2017
[root@foundation0 mail]# atq
6 Fri Nov 24 23:30:00 2017 a root
限制指定用户不能使用at创建一次性任务,如果用户名在at.deny文件内,在该用户将不能创建at计划业务
[root@foundation0 cron]# cat /etc/at.deny
+++++++++++++++++++++++++crontab 周期性执行任务+++++++++++++++++++++++++++++++++++++++
crontab 周期性执行任务:
系统任务计划和用户创建的任务计划
crontab [-u username] [-l|-e|-r]
-u 指定用户
-l 查看当前用户创建的任务
-e 创建或修改任务
-r 删除任务
查看守护进程是否启动:
[root@foundation0 at]# systemctl status crond.service
crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
Active: active (running) since Fri 2017-11-24 13:55:30 CST; 5h 59min ago
Main PID: 4468 (crond)
CGroup: /system.slice/crond.service
└─4468 /usr/sbin/crond -n
格式:分 时 日 月 周 执行的用户 执行的脚本名(/bin/bash) 要执行的命令
(0-59) (0-23) (1-31) (1-12) (0-7)
x-y表示范围
x,y表示列表
*/x 表示时间间隔 */7每隔7分钟,0-59/7
* * * * *
3,15 * * * *
3,15 8-11
3,15 8-11 */2
3,15 8-11 * * 1
30 21 * * *
45 4 1,10,22 * *
10 1 * * * 6,7
00,30 18-23 每天18:00至23:00之间每隔30分钟
00 23 * * * 6
00 */1 * * * 每小时
00 23-7/1
00 23 4 * 1-3
00 4 1 1 *
01 * * * * 每小时
crontab -e -u root #如果没有指定表示当前用户
25 3 * * 1,3,5 /usr/bin/tar -zcvf back.tar.gz /home/wwwroot >/dev/null 2>&1 #>不输出日志或邮件
0 1 * * 1-5 /usr/bin/rm -rf /tmp/
root给其它用户其它用户创建计划任务:
[root@foundation0 cron]# crontab -u kiosk -e
no crontab for kiosk - using an empty one
crontab: installing new crontab
[root@foundation0 cron]# crontab -l
* * * * * sleep 10; /bin/bash /shell_scripts/crontab/echodate.sh >/dev/null 2>&1
0 1 * * 1-5 /usr/bin/rm -rf /tmp/ >/dev/null 2>&1
[root@foundation0 cron]# crontab -l -u kiosk
0 1 * * 1-5 /usr/bin/rm -rf /tmp/
查看创建的计划任务文件:
[root@foundation0 cron]# cd /var/spool/cron/
[root@foundation0 cron]# ls
kiosk root
[root@foundation0 cron]# pwd
/var/spool/cron
[root@foundation0 cron]# ll
total 8
-rw-------. 1 root root 34 Nov 24 20:26 kiosk
-rw-------. 1 root root 131 Nov 24 20:26 root
限制指定用户不能创建计划任务:(系统默认所有用户都可以创建计划任务所以系统没有创建文件/etc/cron.allow)
[root@foundation0 cron]# vim /etc/cron.deny
[2]+ Stopped vim /etc/cron.deny
[root@foundation0 cron]# cat /etc/cron.deny
[root@foundation0 ~]# cat /etc/cron.deny
kiosk
[root@foundation0 cron]# su kiosk
[kiosk@foundation0 cron]$ crontab -e
You (kiosk) are not allowed to use this program (crontab)
See crontab(1) for more information
系统通过crond管理临时文件:
[root@foundation0 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root#执行的结果发给用户root,也可以填写外部邮箱
# For details see man 4 crontabs
# 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
系统的计划任务比一般用户的计划多了一个user-name参数
系统cron作业在两个位置定义: /etc/crontab 和/etc/cron.d/*
预定义作业:/etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly
将shell脚本放到以上几个目录内,将文件将会按指定的周期执行脚本
[root@foundation0 ~]# cd /etc/cron.d
[root@foundation0 cron.d]# ls
0hourly raid-check sysstat unbound-anchor
[root@foundation0 cron.d]# ll
total 16
-rw-r--r--. 1 root root 128 Jan 28 2014 0hourly
-rw-r--r--. 1 root root 108 Mar 10 2014 raid-check
-rw-r--r--. 1 root root 235 Jan 27 2014 sysstat
-rw-r--r--. 1 root root 187 Jan 28 2014 unbound-anchor
[root@foundation0 cron.d]# cat 0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly#运行/etc/cron.hourly目录下的所有脚本
[root@foundation0 cron.d]# cd /etc/cron.hourly/
[root@foundation0 cron.hourly]# ls
0anacron 0yum-hourly.cron
[root@foundation0 cron.d]# ll /etc/cron.*
-rw-r--r--. 1 root root 0 Nov 24 20:33 /etc/cron.allow
-rw-------. 1 root root 6 Nov 24 20:32 /etc/cron.deny
/etc/cron.d:
total 16
-rw-r--r--. 1 root root 128 Jan 28 2014 0hourly
-rw-r--r--. 1 root root 108 Mar 10 2014 raid-check
-rw-r--r--. 1 root root 235 Jan 27 2014 sysstat
-rw-r--r--. 1 root root 187 Jan 28 2014 unbound-anchor
/etc/cron.daily:
total 24
-rwxr-xr-x. 1 root root 332 Apr 15 2014 0yum-daily.cron
-rwxr-xr-x. 1 root root 2239 Feb 13 2014 certwatch
-rwx------. 1 root root 180 Jul 31 2013 logrotate
-rwxr-xr-x. 1 root root 618 Mar 18 2014 man-db.cron
-rwxr-x---. 1 root root 192 Jan 27 2014 mlocate
-rwx------. 1 root root 256 Mar 26 2014 rhsmd
/etc/cron.hourly:
total 8
-rwxr-xr-x. 1 root root 392 Jan 28 2014 0anacron
-rwxr-xr-x. 1 root root 362 Apr 15 2014 0yum-hourly.cron
/etc/cron.monthly:
total 0
/etc/cron.weekly:#
total 0
下面放可执行的shell就可以执行
[root@foundation0 cron.daily]# pwd
/etc/cron.daily
[root@foundation0 cron.daily]# ls
0yum-daily.cron certwatch logrotate man-db.cron mlocate rhsmd
[root@foundation0 cron.daily]# cat mlocate
#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" && $2 != "rootfs" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
anacrontab:
如果错过了备份的时间,则会根据执行的周期,在anacrontab配置的范围内重新执行一次任务
[root@foundation0 cron.daily]# 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
15cron.dailynice run-parts /etc/cron.daily
725cron.weeklynice run-parts /etc/cron.weekly
@monthly 45cron.monthlynice run-parts /etc/cron.monthly