说白了,就是一些例行工作的日常执行的排序程序

Linux  工作排程的种类:  at,cron

例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客 

              例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客

鸟叔说,atd并不是在所有版本都是开启的,但是centos7默认是开启的

[root@localhost ~]# systemctl restart atd  #重启atd服务
[root@localhost ~]# systemctl enable atd  #开机自运行
[root@localhost ~]# systemctl atd status  
Unknown operation 'atd'.
[root@localhost ~]# systemctl status atd  #查阅一下atd目前的状态
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)     #是否开机启动
   Active: active (running) since 一 2019-08-26 09:40:41 CST; 26s ago  #active(running)是否正在运行中
 Main PID: 49782 (atd)
   CGroup: /system.slice/atd.service
           └─49782 /usr/sbin/atd -f

8月 26 09:40:41 localhost.localdomain systemd[1]: Started Job spooling tools.

利用at进行工作排程,工作排程就类似于任务。就需要将任务放到一个文本文件中,这个文本文件放在/var/spool/at目录中。这样就可以利用at来执行了

这就类似于自启动进程。在写黑客程序的时候,都会有一个默认自启动的服务,Linux这里就是类似于这么个东东,这就需要限制账户来执行Linux的at排程,以免黑客程序的入侵

利用/etc/at.allow与/etc/at.deny这两个文件来限制at的执行。执行原理如图

例行性工作排程   (crontab)-风君雪科技博客

 例行性工作排程   (crontab)-风君雪科技博客

at语法

例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客

 at指令的下达,会进入一个at shell的环境来操作。指令的下达就与环境变量有关,同时与当时的工作目录也有关联,因此使用绝对路径会比较保险一些。

利用at命令,将/root/.bashrc进行邮寄

[root@localhost ~]# at now +5 minutes
at> /bin/mail -s "testing at job" root < /root/.bashrc
at> <EOT>
job 3 at Mon Aug 26 10:36:00 2019
[root@localhost ~]# at -c 3
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=1; export XDG_SESSION_ID
HOSTNAME=localhost.localdomain; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.132.1 64086 22; export SSH_CLIENT
PERL5LIB=/root/perl5/lib/perl5:; export PERL5LIB
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
QTDIR=/usr/lib64/qt-3.3; export QTDIR
QTINC=/usr/lib64/qt-3.3/include; export QTINC
PERL_MB_OPT=--install_base /root/perl5; export PERL_MB_OPT
SSH_TTY=/dev/pts/0; export SSH_TTY
QT_GRAPHICSSYSTEM_CHECKED=1; export QT_GRAPHICSSYSTEM_CHECKED
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;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=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:*.webm=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/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=zh_CN.UTF-8; export LANG
KDEDIRS=/usr; export KDEDIRS
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
PERL_LOCAL_LIB_ROOT=:/root/perl5; export PERL_LOCAL_LIB_ROOT
LOGNAME=root; export LOGNAME
QTLIB=/usr/lib64/qt-3.3/lib; export QTLIB
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share; export XDG_DATA_DIRS
SSH_CONNECTION=192.168.132.1 64086 192.168.132.16 22; export SSH_CONNECTION
LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
QT_PLUGIN_PATH=/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins; export QT_PLUGIN_PATH
PERL_MM_OPT=INSTALL_BASE=/root/perl5; export PERL_MM_OPT
OLDPWD=/srv; export OLDPWD
cd /root || {
         echo 'Execution directory inaccessible' >&2
         exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER056cdc8c'
/bin/mail -s "testing at job" root < /root/.bashrc             #这里就是我们的指令

marcinDELIMITER056cdc8c

batch:系统有空时才进行的后台任务

batch指令,会在cpu工作负载小于 0.8 的时候,才进行你所下达的任务指令。

鸟哥解释的很清楚,这个工作负载的概念

例行性工作排程   (crontab)-风君雪科技博客

整分时间  概念

例行性工作排程   (crontab)-风君雪科技博客

循环执行的例行性工作排程

我理解的就是,每隔多长时间执行一次的程式

例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客

例行性工作排程   (crontab)-风君雪科技博客

上面三个图就是  日期格式  的范围

上面倒数第而张图,那个例子很清晰。。

例行性工作排程   (crontab)-风君雪科技博客

上面几个日期函数的特殊字符,我觉得很有用。。。

例行性工作排程   (crontab)-风君雪科技博客

这里有个例外。就是鸟哥在文中说的,cron这个命令,有的unix会把他放到内存里去执行,这样,需要重启一下cron服务,才能执行你的修改后的指令  systemctl restart crond   ,将服务重启一下

[root@localhost ~]# 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

例行性工作排程   (crontab)-风君雪科技博客

 将某个sh产生的信息丢入垃圾桶

xxxxx.sh > /dev/null 2>&1

后面的2>&1,不大理解为什么要加这个,所以查了一下

对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null(这里才是重点)

可以把/dev/null 可以看作”黑洞”. 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.

偶尔也可以把 & 在命令的最后加上,表示让程序后台执行。

为何2>&1要写在后面?

index.php task testOne >/dev/null 2>&1

我们可以理解为,左边是标准输出,好,现在标准输出直接输入到 /dev/null 中,而2>&1是将标准错误重定向到标准输出,所以当程序产生错误的时候,相当于错误流向左边,而左边依旧是输入到/dev/null中。

可以理解为,如果写在中间,那会把隔断标准输出指定输出的文件

将指令至于背景中,我理解的意思就是后台运行

 在指令后面加&

[root@localhost ~]# tar -zpcf /tmp/etc.tar.gz /etc &