计划任务是为了提高生产效率,减少失误操作的重要工具。也是我们需要掌握的必不可少的技术。在各个系统平台上都有类似的计划任务功能,相信大家都对Windows的计划任务更加熟悉一点。本文就是要和大家一起学习在Linux系统中如何制定计划任务和具体的操作。
Linux中计划任务主要分为两类:
1、一次性的任务计划:只执行一次就结束—at命令
2、周期性的任务计划:每隔一定的周期去做相同的事情—crontab命令
at
at命令是由atd服务提供的,atd服务的启动方法如下:
CentOS 6
service atd start
CentOS 7
systemctl start atd.service
at命令格式
at [option] TIME
-v:显示版本信息
-l:at -l相当于atq命令,列出指定队列中等待运行的进程
-d:后面跟进程号,删除指定的进程,相当于atrm命令
-c:查看具体进程
-f:从指定的文件中读取进程任务,路径是/path/from/somefile
-m:当任务完成之后,将给用户发送邮件。即使没有标准输出
注意:进程执行命令的结果中的标准输出和错误以邮件通知给相关用户
TIME:定义什么时候执行at中的进程任务
HH:MM (如 23:40)
HH代表小时(0-23),MM代表(0-59),表示当日的HH:MM时刻执行进程,如果该时刻已经超出,则明天该时刻执行此进程。
HH:MM YYYY-MM-DD (如 11:40 2018-11-11)
设置在某年某月某日某一时刻执行进程任务。
HH:MM[am|pm] [Month] [DATE] (如 08am April 27 或 18:30 tomorrow)
设置某月某日某一时刻执行进程任务。
HH:MM[am|pm] + number[minutes|hours|days|weeks]
在指定的某一时刻之后一段时间执行进程任务
如 now + 5 minutes 或 23:00 + 2 days
示例:
在23点显示time:23:00
[root@CentOS7 ~]$at 23:00
at> echo "time:23:00"
at> <EOT>
job 6 at Sun Aug 27 23:00:00 2017
注意:设置好进程任务,按ctrl+d退出,完成设置
设置好计划进程后,可以通过 at -l
或者 atq
命令查看at当前的进程队列中有哪些进程任务
[root@CentOS7 ~]$atq
1 Sun Aug 27 23:00:00 2017 a root
2 Sun Aug 27 23:30:00 2017 a root
也可以通过at -c n(n是任务编号)命令查看at队列中指定任务编号进程任务的内容:
[root@CentOS7 ~]$at -c 1
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=2; export XDG_SESSION_ID
HOSTNAME=CentOS7.ghy; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.15.1\ 54079\ 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:\*.arc=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lha=01<