例行性工作排程 (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 &
總結
以上是生活随笔為你收集整理的例行性工作排程 (crontab)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小班教案《合拢放开》反思
- 下一篇: 监控摄像头自动跟踪技术的发展趋势