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

 

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

例行性工作排程   (crontab)

例行性工作排程   (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 &

 

相关文章:

  • 2021-05-20
  • 2021-09-21
  • 2021-08-20
  • 2021-07-25
  • 2021-04-11
  • 2021-09-20
  • 2021-05-23
  • 2021-09-27
猜你喜欢
  • 2021-11-06
  • 2021-11-12
  • 2021-07-03
  • 2021-12-19
  • 2021-05-07
  • 2022-12-23
  • 2021-12-11
相关资源
相似解决方案