zoukankan      html  css  js  c++  java
  • 例行性工作排程 (crontab)

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

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

     

                 

    鸟叔说,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的执行。执行原理如图

     

    at语法

     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 的时候,才进行你所下达的任务指令。

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

    整分时间  概念

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

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

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

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

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

    这里有个例外。就是鸟哥在文中说的,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

     将某个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 &
  • 相关阅读:
    基于Tire树和最大概率法的中文分词功能的Java实现
    通过 Spring RestTemplate 调用带请求体的 Delete 方法(Delete With Request Body)
    《高效能程序员的修炼》之译者序(本书将于7月初上市,人民邮电出版社)
    JVM类加载过程学习总结
    Web安全之Cookie劫持
    2016第40周五
    年轻By塞缪尔·厄尔曼
    2016第40周三
    2016第40周二
    果断歌
  • 原文地址:https://www.cnblogs.com/Lonelychampion/p/11410907.html
Copyright © 2011-2022 走看看