Linux中实现定时任务详解

时间:2022-10-20 07:53:19

一、at命令

1.at服务

  cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
  service atd start //启动服务
  service atd stop //关闭服务
  service atd restart //重启服务
  service atd reload //重新载入配置
  service atd status //查看服务状态

2.at在配置文件:

at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。

3.参数详解

at [-V] [-q x] [-f file] [-mldbv] time
at -c job …
atq [-V] [-q x]
atrm [-V] job …

-V : 印出版本编号

-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c… z 以及 A, B, … Z 共 52 个

-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者

-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入 网络应用

-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)
-v : 列出所有已经完成但尚未删除的指定

at命令执行流程

  # at 2:05 tomorrow
  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分
4.使用示例:
[root@foundation79 ~]# at 16:00 在16:00时执行
at> touch /mnt/file{1..3 }
at> <EOT>                
job 1 at Fri Apr 27 16:00:00 2018
[root@foundation79 ~]# at -l                   查看定时任务
1 Fri Apr 27 16:00:00 2018 a root
[root@localhost spool]# at -l 2            后面添加任务号查询具体定时任务
2   Tue May 22 16:00:00 2018 a root

查看2号任务详细信息(脚本)

[root@localhost ~]# at -c 2      #或者直接在/var/spool/at/下查看生成定时文件内容
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
LC_PAPER=en_US.utf8; export LC_PAPER
XDG_SESSION_ID=3; export XDG_SESSION_ID
HOSTNAME=localhost; export HOSTNAME
LC_MONETARY=en_US.utf8; export LC_MONETARY
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=172.25.254.79\ 37931\ 22; export SSH_CLIENT
LC_NUMERIC=en_US.utf8; export LC_NUMERIC
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=38\;5\;27:ln=38\;5\;51:mh=44\;38\;5\;15:pi=40\;38\;5\;11:so=38\;5\;13:do=38\;5\;5:bd=48\;5\;232\;38\;5\;11:cd=48\;5\;232\;38\;5\;3:or=48\;5\;232\;38\;5\;9:mi=05\;48\;5\;232\;38\;5\;15:su=48\;5\;196\;38\;5\;15:sg=48\;5\;11\;38\;5\;16:ca=48\;5\;196\;38\;5\;226:tw=48\;5\;10\;38\;5\;16:ow=48\;5\;10\;38\;5\;21:st=48\;5\;21\;38\;5\;15:ex=38\;5\;34:\*.tar=38\;5\;9:\*.tgz=38\;5\;9:\*.arc=38\;5\;9:\*.arj=38\;5\;9:\*.taz=38\;5\;9:\*.lha=38\;5\;9:\*.lz4=38\;5\;9:\*.lzh=38\;5\;9:\*.lzma=38\;5\;9:\*.tlz=38\;5\;9:\*.txz=38\;5\;9:\*.tzo=38\;5\;9:\*.t7z=38\;5\;9:\*.zip=38\;5\;9:\*.z=38\;5\;9:\*.Z=38\;5\;9:\*.dz=38\;5\;9:\*.gz=38\;5\;9:\*.lrz=38\;5\;9:\*.lz=38\;5\;9:\*.lzo=38\;5\;9:\*.xz=38\;5\;9:\*.bz2=38\;5\;9:\*.bz=38\;5\;9:\*.tbz=38\;5\;9:\*.tbz2=38\;5\;9:\*.tz=38\;5\;9:\*.deb=38\;5\;9:\*.rpm=38\;5\;9:\*.jar=38\;5\;9:\*.war=38\;5\;9:\*.ear=38\;5\;9:\*.sar=38\;5\;9:\*.rar=38\;5\;9:\*.alz=38\;5\;9:\*.ace=38\;5\;9:\*.zoo=38\;5\;9:\*.cpio=38\;5\;9:\*.7z=38\;5\;9:\*.rz=38\;5\;9:\*.cab=38\;5\;9:\*.jpg=38\;5\;13:\*.jpeg=38\;5\;13:\*.gif=38\;5\;13:\*.bmp=38\;5\;13:\*.pbm=38\;5\;13:\*.pgm=38\;5\;13:\*.ppm=38\;5\;13:\*.tga=38\;5\;13:\*.xbm=38\;5\;13:\*.xpm=38\;5\;13:\*.tif=38\;5\;13:\*.tiff=38\;5\;13:\*.png=38\;5\;13:\*.svg=38\;5\;13:\*.svgz=38\;5\;13:\*.mng=38\;5\;13:\*.pcx=38\;5\;13:\*.mov=38\;5\;13:\*.mpg=38\;5\;13:\*.mpeg=38\;5\;13:\*.m2v=38\;5\;13:\*.mkv=38\;5\;13:\*.webm=38\;5\;13:\*.ogm=38\;5\;13:\*.mp4=38\;5\;13:\*.m4v=38\;5\;13:\*.mp4v=38\;5\;13:\*.vob=38\;5\;13:\*.qt=38\;5\;13:\*.nuv=38\;5\;13:\*.wmv=38\;5\;13:\*.asf=38\;5\;13:\*.rm=38\;5\;13:\*.rmvb=38\;5\;13:\*.flc=38\;5\;13:\*.avi=38\;5\;13:\*.fli=38\;5\;13:\*.flv=38\;5\;13:\*.gl=38\;5\;13:\*.dl=38\;5\;13:\*.xcf=38\;5\;13:\*.xwd=38\;5\;13:\*.yuv=38\;5\;13:\*.cgm=38\;5\;13:\*.emf=38\;5\;13:\*.axv=38\;5\;13:\*.anx=38\;5\;13:\*.ogv=38\;5\;13:\*.ogx=38\;5\;13:\*.aac=38\;5\;45:\*.au=38\;5\;45:\*.flac=38\;5\;45:\*.mid=38\;5\;45:\*.midi=38\;5\;45:\*.mka=38\;5\;45:\*.mp3=38\;5\;45:\*.mpc=38\;5\;45:\*.ogg=38\;5\;45:\*.ra=38\;5\;45:\*.wav=38\;5\;45:\*.axa=38\;5\;45:\*.oga=38\;5\;45:\*.spx=38\;5\;45:\*.xspf=38\;5\;45:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
XMODIFIERS=@im=ibus; export XMODIFIERS
LANG=en_US.utf8; export LANG
LC_MEASUREMENT=en_US.utf8; export LC_MEASUREMENT
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
SSH_CONNECTION=172.25.254.79\ 37931\ 172.25.254.141\ 22; export SSH_CONNECTION
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
LC_TIME=en_US.utf8; export LC_TIME
cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER0cab33fa' touch /mnt/Sophie marcinDELIMITER0cab33fa 

删除定时任务:

[root@localhost at]# atq
2   Tue May 22 16:00:00 2018 a root
3   Wed May 23 00:00:00 2018 a root
[root@localhost at]# atrm 2
[root@localhost at]# atq
3   Wed May 23 00:00:00 2018 a root

监控生成文件:

[root@foundation79 ~]watch -n 1 ls /mnt  监控桌面文件显示情况在1600时显示文件

at执行权限的黑白名单
黑名单:

在/etc/at.deny 文件中添加需要拒绝的用户

[root@localhost ~]# echo "student" > /etc/at.deny 
[root@localhost at]# su - student 
Last login: Thu May 11 20:23:54 EDT 2017 on pts/0
[student@localhost ~]$ at now+6mins
You do not have permission to use at.
白名单(优先级高于黑名单):
[root@localhost ~]# echo "student" > /etc/at.allow
[root@localhost ~]# su - student
Last login: Tue May 22 00:11:27 EDT 2018 on pts/0
[student@localhost ~]$ 
[student@localhost ~]$ at midnight
at> boot
at> <EOT>
job 4 at Wed May 23 00:00:00 2018

二、crontab定时

1.编写定时文件

[root@foundation79 init.d]# crontab -u root -e

* * * * * touch /mnt/file{1..3} #每分钟执行一次

编写格式
分钟 小时 天 月 周
/2 * * * 命令 #每分钟执行两次
*/2 08-15 1,25 3-6 5 表示3到6月每周五和每月的1号和25号,8点到15点,每分钟执行2次

查看定时任务crontab -u root -l

[root@foundation79 init.d]# crontab -u root -l

* * * * * touch /mnt/file{1..3}

删除所有定时指令

[root@foundation79 init.d]# crontab -u root -r
[root@foundation79 init.d]# crontab -u root -l
no crontab for root
2.在文件中进行配置

[root@foundation79 ~]# vim /etc/cron.d/westos

* * * * * root touch /mnt/test{1..5}


黑名单:
[root@localhost ~]# echo "student" > /etc/cron.deny
[root@localhost ~]# su - student
Last login: Tue May 22 00:18:21 EDT 2018 on pts/0
[student@localhost ~]$ crontab -e
You (student) are not allowed to use this program (crontab)
See crontab(1) for more information
白名单:
[root@localhost ~]# echo "student" >> /etc/cron.allow
[root@localhost ~]# su - student
Last login: Tue May 22 00:27:38 EDT 2018 on pts/0
[student@localhost ~]$ crontab -e
no crontab for student - using an empty one