【进程/作业管理】篇章四:Linux任务计划、周期性任务执行
命令归纳:
at | 未来时间点让特定任务运行一次 |
batch | 未来时间点让系统自行选择在系统资源较空闲的时间去执行指定的任务 |
corn | 周期性任务计划(corntad) |
at命令详解
<--- 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了 --->
任务计划和周期性任务计划执行了之后都会通过邮件发送给用户,用户可以通过mail命令查看执行情况,也可以通过配置文件查看执行情况(配置文件: /var/spool/mail/USER_NAME)
一、命令格式:
at [参数] [时间]
at [-V] [-q queue] [-f file] [-mMlbv] TIME
at [-V] [-q queue] [-f file] [-mMlbv] -t time_arg
at -c job [job...]
at [ -rd ] job [job...]
atq [-V] [-q queue]
atrm [-V] job [job...]
二、命令功能:
在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程(ps -ef | grep atd查看, 开启用/etc/init.d/atd start or restart; 开机即启动则需要运行 chkconfig --level 2345 atd on)
三、命令参数
-V : 印出版本编号
-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,
而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个(默认值 “a” )
-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者
-f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)
-v : 列出所有已经完成但尚未删除的指定
TIME :
HH:MM [YYYY-mm-dd]
noon(中午),midnight(深夜), teatime(下午16点)
tomorrow
now+#
UNIT:minutes, hours, days, OR weeks
【注意:作业执行结果是以邮件发送给提交作业的用户】
四、示例演示:
示例1:查看当前任务队列
# at -l
[root@test1 mnt]# at -l
10 2018-06-15 17:00 a root
[root@test1 mnt]#
示例2:删除任务
# at -d 10
[root@test1 mnt]# at -d 10
[root@test1 mnt]# at -l
[root@test1 mnt]#
示例3:查看指定作业的具体内容【只能查看还未执行的任务,执行完了的不能查看】
# at -c 11
[root@test1 mnt]# at -l
11 2018-06-15 17:00 a root
[root@test1 mnt]# at -c 11
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=test1; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=10.0.0.1\ 62110\ 22; export SSH_CLIENT
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=01\;34:ln=01\;36:mh=00:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:mi=01\;05\;37\;41:su=37\;41:sg=30\;43:ca=30\;41:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lz=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.bz=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.svgz=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.flv=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.cgm=01\;35:\*.emf=01\;35:\*.axv=01\;35:\*.anx=01\;35:\*.ogv=01\;35:\*.ogx=01\;35:\*.aac=01\;36:\*.au=01\;36:\*.flac=01\;36:\*.mid=01\;36:\*.midi=01\;36:\*.mka=01\;36:\*.mp3=01\;36:\*.mpc=01\;36:\*.ogg=01\;36:\*.ra=01\;36:\*.wav=01\;36:\*.axa=01\;36:\*.oga=01\;36:\*.spx=01\;36:\*.xspf=01\;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/htop1.0.2/bin/:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/mnt; export PWD
LANG=en_US.UTF-8; export LANG
MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles; export MODULEPATH
LOADEDMODULES=; export LOADEDMODULES
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
CVS_RSH=ssh; export CVS_RSH
SSH_CONNECTION=10.0.0.1\ 62110\ 10.0.0.200\ 22; export SSH_CONNECTION
MODULESHOME=/usr/share/Modules; export MODULESHOME
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
OLDPWD=/root; export OLDPWD
cd /mnt || {
echo 'Execution directory inaccessible' >&2
exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER5953a367'
/bin/ls marcinDELIMITER5953a367
[root@test1 mnt]#
示例4:
# at 2:05 tomorrow 在每天2:05分执行
at>/home/kyle/do_job
at> Ctrl+D
AT Time中的时间表示方法
-----------------------------------------------------------------------
时 间 例子 说明
-----------------------------------------------------------------------
Minute at now + 5 minutes 任务在5分钟后运行
Hour at now + 1 hour 任务在1小时后运行
Days at now + 3 days 任务在3天后运行
Weeks at now + 2 weeks 任务在两周后运行
Fixed at midnight 任务在午夜运行
Fixed at 10:30pm 任务在晚上10点30分
Fixed at 23:59 12/31/2018 任务在2018年12月31号23点59分
示例5:三天后的下午5点执行 /bin/ls
# at 5pm+3 day
[root@test1 mnt]# date
Tue Jun 12 18:25:08 CST 2018
[root@test1 mnt]# at 5pm+3 day
at> /bin/ls
at> <EOT> 【退出使用Ctrl + d 】
job 10 at 2018-06-15 17:00
You have new mail in /var/spool/mail/root
[root@test1 mnt]# at -l
10 2018-06-15 17:00 a root
示例6:明天17点钟,输出时间到指定文件 /mnt/date.log内
# at now+1minutes
at> date >/mnt/date.log
at> <EOF>
[root@test1 mnt]# at now+1minutes
at> date >/mnt/date.log
at> <EOT>
job 13 at 2018-06-12 18:38
[root@test1 mnt]# at -l
13 2018-06-12 18:38 a root
[root@test1 mnt]# ls
at.taks date.log htop-2.2.0-1.el7.x86_64.rpm mm.sh XX xx.txt
[root@test1 mnt]# cat date.log
Tue Jun 12 18:38:00 CST 2018
五、补充:atd 的启动与 at 运行的方式
1)atd 的启动
要使用一次性计划任务时,我们的 Linux 系统上面必须要有负责这个计划任务的服务,那就是 atd 服务。 不过并非所有的 Linux distributions 都默认会把他打开的,所以,某些时刻我们需要手动将atd 服务激活才行。 激活的方法很简单,就是这样:
命令:【 /etc/init.d/atd {start|stop|restart|condrestart|status} 】
/etc/init.d/atd start
/etc/init.d/atd restart
[root@test1 /]# /etc/init.d/atd start
[root@test1 /]# /etc/init.d/atd [root@test1 /]# /etc/init.d/atd stop
停止 atd:[确定]
[root@test1 /]# ps -ef|grep atd
root 25062 24951 0 14:53 pts/0 00:00:00 grep atd
[root@test1 /]# /etc/init.d/atd start
[确定]td:[确定]
[root@test1 /]# ps -ef|grep atd
root 25068 1 0 14:53 ? 00:00:00 /usr/sbin/atd
root 25071 24951 0 14:53 pts/0 00:00:00 grep atd
[root@test1 /]# /etc/init.d/atd restart
停止 atd:[确定]
[确定]td:[确定]
备注:配置一下启动时就启动这个服务,免得每次重新启动都得再来一次
命令:
chkconfig atd on
输出:
[root@test1 /]# chkconfig atd on
[root@test1 /]#
2)at 的运行方式
既然是计划任务,那么应该会有任务执行的方式,并且将这些任务排进行程表中。那么产生计划任务的方式是怎么进行的? 事实上,我们使用 at 这个命令来产生所要运行的计划任务,并将这个计划任务以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了。就这么简单。
不过,并不是所有的人都可以进行 at 计划任务。为什么? 因为系统安全的原因。很多主机被所谓的攻击破解后,最常发现的就是他们的系统当中多了很多的黑客程序, 这些程序非常可能运用一些计划任务来运行或搜集你的系统运行信息,并定时的发送给黑客。 所以,除非是你认可的帐号,否则先不要让他们使用 at 命令。那怎么达到使用 at 的可控呢?
我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制。加上这两个文件后, at 的工作情况是这样的:
先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 命令了。
如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。
透过这个说明,我们知道 /etc/at.allow 是管理较为严格的方式,而 /etc/at.deny 则较为松散 (因为帐号没有在该文件中,就能够运行 at 了)。在一般的 distributions 当中,由于假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思 (您可以自行检查一下该文件)。 不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行
batch命令:
<--- batch会让系统自行选择在系统资源较空闲的时间去执行指定的任务,我们一般不使用这个命令 --->
cron、crontab命令详解:
<--- 周期性任务计划(corntad) --->
一、介绍
cron是一个后台运行;其有三个进程分别为
[root@test1 mnt]# rpm -qa | grep cron
cronie-anacron-1.4.4-15.el6.x86_64
crontabs-1.10-33.el6.noarch
cronie-1.4.4-15.el6.x86_64
可以使用 # rpm -qa | grep cron 查看
cronie:主程序包,提供了crond守护进程及相关辅助工具;
cronie-anacron:cronie的补充程序,用于监控cronie任务执行状态,如cronie中的任务在过去该运行的时间点未能正常运行,则cronie-anacron会随后启动一次任务
crontables:包含CentOS提供系统维护任务
二、我们要使用周期性任务计划的话,必须先确保进程处于运行状态
CentOS 7:
systemctl status crond.service
Active: active (running) ... ...
CentOS 6:
service crond status
... is running.
【如果显示的是上面两种情况的话,就是进程以及处于运行状态了】
三、cron任务分为两类
系统cron任务:主要用于实现系统自身的维护; 【这个是实现系统维护的,我们操作定时任务一般不使用系统cron任务】
手动编辑:/etc/crontab文件
用户cron任务: 【用户一般使用crontab命令实现周期性定时任务的】
命令:crontab命令
1、两类任务的通用格式:【参考 /etc/crontab】
注意:
(1) 每一行定义一个周期性任务,共7个字段;
* * * * * : 定义周期性时间
user-name : 运行任务的用户身份
command to be executed:任务
(2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
(3) 执行结果邮件发送给MAILTO指定的用户【用户可以使用mail命令或者 /var/spool/mail/USER_NAME查看】
前五个字段的时间法:
表示法:
(1) 特定值;
给定时间点有效取值范围内的值;
注意:day of week和day of month一般不同时使用;
(2) *
给定时间点上有效取值范围内的所有值;表“每..”
(3) 离散取值:,
在时间点上使用逗号分隔的多个值;
#,#,#
(4) 连续取值:-
在时间点上使用-连接开头和结束
#-#
(5) 在指定时间点上,定义步长:
/#:#即步长; 注意:
(1) 指定的时间点不能被步长整除时,其意义将不复存在;
(2) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;
定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;
示例:
(1) 3 * * * *:每小时执行一次;每小时的第3分钟;
(2) 3 4 * * 5:每周执行一次;每周5的4点3分;
(3) 5 6 7 * *:每月执行一次;每月的7号的6点5分;
(4) 7 8 9 10 *:每年执行一次;每年的10月9号8点7分;
(5) 9 8 * * 3,7:每周三和周日;
(6) 0 8,20 * * 3,7:
(7) 0 9-18 * * 1-5:
(8) */5 * * * *:每5分钟执行一次某任务;
(9) */7
2、对于系统cron任务:
系统任务主要用于系统维护等,我们操作定时任务一般不使用系统cron任务
如果必须要操作:我们一般把任务写到 /etc/crontab文件里面
3、用户cron任务,
我们直接使用crontab命令实现
直接使用:crontab -e 编辑我们需要执行的任务就行了
语法格式:rontab [-u user] [-l | -r | -e] [-i]
-e:编辑任务;
-l:列出所有任务;
-r:移除所有任务;即删除/var/spool/cron/USERNAME文件;
-i:同 ' -r ' 一同使用,以交互式模式让用户有选择的移除指定任务;
-u user:root用户可为指定用户管理cron任务 【仅管理员有权限】
注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件:
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
【定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可】
思考:
某任务在指定的时间因关机未能执行,下次开机会不会自动执行?
不会!.
如果期望某时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现;
四、示例演示
1、每12小时备份一次/etc目录至/backups目录中,保存文件 名称格式为“etc-yyyy-mm-dd-hh.tar.xz”
【进程/作业管理】篇章四:Linux任务计划、周期性任务执行的更多相关文章
- Linux中计划任务、周期性任务设置
Linux中计划任务.周期性任务设置 计划任务:指在未来的特定时间里,执行一次某一特定任务.当然,如果同一任务需要在不同时间点执行执行两次.三次或多次,可以视为多个一次看待. 周期性任务:指某一任务需 ...
- Linux任务计划、周期性任务执行
Linux任务计划.周期性任务执行 周期性任务执行: cron 守护进程(crond):服务,不间断地运行于后台 # service crond {start|stop|status|restart} ...
- 【Linux】【Services】任务计划、周期性任务执行
Linux任务计划.周期性任务执行 未来的某时间点执行一次某任务:at, batch 周期性运行某任务:crontab 执行结果:会通过邮件发送给用户 ...
- 配置Linux任务计划
Linux有三种计划任务: at:指定一个时间执行一个任务 (适用一个或多个任务,执行一次后就不用) cron:根据一个时间表自动执行任务 (使用一个或多个任务,周期性执行) 系统级别的计划任务及其扩 ...
- Linux任务计划命令 :crontab -e
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond ...
- linux下计划任务学习记录
0x01 计划任务简介 linux 中计划任务主要分为”循环执行”和”只执行一次”两种,分别对应的时 crond 服务 和 atd 服务: 0x02 只执行一次的计划任务 0x02.1 atd 服务说 ...
- Linux操作系统的计划任务
Linux操作系统的计划任务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.任务计划概述 Linux任务计划.周期性任务执行 未来的某时间点执行一次任务: at: 指定时间点, ...
- Linux任务计划at
Linux任务计划at 一Linux任务计划介绍 Linux任务计划.周期性任务执行at:未来的某时间点执行一次任务batch:系统自行选择空闲时间去执行此处指定的任务cron:周期性运行某任务 二a ...
- Linux任务计划
Linux任务计划: 一次性任务执行(at.batch): at:定时任务,指定一个时间执行一个任务,只能执行一次. at使用方式: 交互式:让用户在at>提示符输入多个要执行的命令: 批处理: ...
- Linux操作系统计划任务
++++++++++++++++++++++++++++++++++++++++++++++++标题:Linux操作系统的计划任务内容:计划任务分为单次任务和周期性任务,周期任务分为系统级计划任务和用 ...
随机推荐
- Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)
题目链接 题目大意 给你一个长度为n的字符串,可以交换相邻两个元素,使得这个字符串翻转,求最少多少种次数改变 题目思路 如果要求数组排序所需要的冒泡次数,那其实就是逆序对 这个也差不多,但是如果是相同 ...
- C语言讲义——结构化编程(分支、循环)
顺序结构(从上到下) 分支结构(也叫选择结构) 循环结构 分支结构 if...else 最基本的分支结构是if(){}else{}. 为了代码的安全,同时也是出于代码规范的考虑,if()后面一定要加花 ...
- Java集合【7】--List接口超级详细解析
目录 1.List接口的特性 2.List接口的源码解析 3.相关子类介绍 3.1 ArrayList 3.1.1 成员变量 3.1.2 构造方法 3.1.3 常用增删改查方法 添加元素 查询元素 更 ...
- Event Loop - 事件队列
Event Loop 定义: event - 事件 loop - 循环,既然叫事件循环,那么循环的点在哪? 循环的是一个又一个的任务队列,这些任务队列由宏任务和微任务构成 两条原则 一次处理一个任务 ...
- 重做系统后 恢复oracle 实例
第一次进行操作,按照网上方法,试了一遍,很多细节搞不清楚,但是还是要记录一下. 备份 old数据库 所用到文件有: XXXXXX\product\11.2.0\dbhome_1\database\pw ...
- charles功能(四) 模拟 接口404/403返回值(blacklist方法)
1.tools-->blacklist 2.允许启用黑名单选择接口返回错误的形式 (404或者403),添加接口地址并保存 3.再次请求效果如下
- moviepy音视频剪辑VideoClip类fl_image方法image_func报错ValueError: assignment destination is read-only解决办法
☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类VideoClip的fl_image方法用于进行对剪辑帧数据进行变换. 调用语法:fl_image(self, im ...
- 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一. 案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...
- 第15.42节、PyQt输入部件:QFontComboBox、QLineEdit、QTextEdit、QPlainText功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 输入部件量比较多,且功能很丰富,但除了用于编写编辑器.浏览器 ...
- PyQt(Python+Qt)学习随笔:QTreeView树形视图的itemsExpandable属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeView树形视图的itemsExpandable属性用于控制视图中用户是否可以通过操作展开 ...