RH134-04 計劃任務
第四章、計劃任務
4.1 使用at定義一次性的計劃任務
$ sudo systemctl is-enabled atd.service 開機運行
enabled
$ sudo systemctl status atd.service 保證該服務是已經運行了的
atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)
Active: active (running) since 六 2014-07-1909:04:06 CST; 27min ago
定義時間:
now+5min
teatimetomorrow 明天下午4點 16:00
noon+4 days
5pmaugust 3 2016
07190937 <---7月19日09:37
07190937 <---7月19日09:37沒寫年份就是今年,如果17年,則0719093717
編輯任務
# at -t 07190937
at> wall "can you see me?"
at> <EOT>
job 1 at Sat Jul 19 09:37:00 2014
# echo "date > ~/myjob" | atnow +3min
我的操作
[[email protected]]$ date
Sun Jun 25 15:12:13CST 2017
[[email protected]]$
[[email protected]]$ at -t 06251515
at> wall "canyou see me "
at> <EOT> (ctrl+D)退出並制訂成功
job 1 at Sun Jun 2515:15:00 2017
[[email protected]]$
[[email protected]]$ atq 查看當前任務
1 Sun Jun 25 15:15:00 2017 a student
[[email protected]]$ date
Sun Jun 25 15:14:46CST 2017
[[email protected]]$
Broadcast message [email protected] (Sun Jun 25 15:15:01 2017):
can you see me
[[email protected]]$
再來一次操作:
[[email protected]]$ at now +2min
at> wall "canyou see me this time"
at> <EOT>
job 2 at Sun Jun 2515:18:00 2017
[[email protected]]$ atq
2 Sun Jun 25 15:18:00 2017 a student
[[email protected]]$ date
Sun Jun 25 15:16:48CST 2017
[[email protected]]$
計劃生成的文件
[[email protected] ~]# ls/var/spool/at/a00002017d0e76
/var/spool/at/a00002017d0e76
[[email protected] ~]# ls/var/spool/at/
a00002017d0e76 spool
at –c 4
vim var/spool/at/a00002017d0e76
atq
atrm 4
======================================================
定義任務的隊列: a-z ,A-Z, 更大的字母執行優先級更高
a隊列默認給at , b隊列默認給batch(當系統負載小於0.8的時候自動執行)
查看負載
[[email protected] /]#uptime
15:36:25 up 3:07, 2 users, load average: 0.01, 0.06, 0.06
[[email protected] /]#
Batch馬上執行(負載小於0.8)
# at -q g teatime tomorrow
# at -q b 16:05 tomorrow
如果任務比較復雜,命令比較多,可以把操作編輯成shell腳本:
# at -t 07190950 -f /path/to/app.sh
# atq 查看用at定義的計劃任務
1 SatJul 19 09:37:00 2014 a root
# at -t 07190950
at> echo "log into file" >/tmp/log.txt
at> echo "can you see me?">> /tmp/log.txt
at> <EOT> <---- 按ctrl + d 結束任務編輯
job 2 at Sat Jul 19 09:50:00 2014
# at -c 2 查看編號為2的任務的具體代碼
# atrm 2 刪除編號為2的任務
[[email protected] ~]#echo "date >/myjob" | at now+3min
job 3 at Sun Jun 2515:31:00 2017
[[email protected] ~]#atq
3 Sun Jun 25 15:31:00 2017 a root
[[email protected] ~]#date
Sun Jun 25 15:29:00CST 2017
[[email protected] ~]# at-c 3
#!/bin/sh
# atrun uid=0 gid=0
# mail student 0
umask 22
XDG_VTNR=1; exportXDG_VTNR
XDG_SESSION_ID=1;export XDG_SESSION_ID
HOSTNAME=desktop0.example.com;export HOSTNAME
SHELL=/bin/bash;export SHELL
HISTSIZE=1000; exportHISTSIZE
USER=root; exportUSER
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:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin;export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8;export LANG
HISTCONTROL=ignoredups;export HISTCONTROL
SHLVL=1; export SHLVL
XDG_SEAT=seat0;export XDG_SEAT
HOME=/root; exportHOME
LOGNAME=root; exportLOGNAME
LESSOPEN=\|\|/usr/bin/lesspipe.sh\%s; export LESSOPEN
cd /root || {
echo ‘Execution directory inaccessible‘>&2
exit 1
}
${SHELL:-/bin/sh}<< ‘marcinDELIMITER21901fb4‘
date >/myjob
marcinDELIMITER21901fb4
[[email protected] ~]# ls/home/student/myjob
ls: cannot access/home/student/myjob: No such file or directory
[[email protected] ~]#atq
3 Sun Jun 25 15:31:00 2017 a root
[[email protected] ~]#
驗證結果
[[email protected] /]# cat myjob
Sun Jun 25 15:31:01 CST 2017
[[email protected] /]#
先編輯一個文件,再顯示出來
[[email protected] /]# at now +1min -f /myjob
job 7 at Sun Jun 25 15:42:00 2017
[[email protected] /]#
cat myjob
echo "123"
echo "abc"
echo "can you see my, i am in my job"
[[email protected] /]# at now +1min -f /myjob
job 11 at Sun Jun 25 15:48:00 2017
[[email protected] /]# atq
4 Sun Jun 2515:37:00 2017 b root
11 Sun Jun 2515:48:00 2017 a root
[[email protected] /]# date
Sun Jun 25 15:47:04 CST 2017
[[email protected] /]# at -c 11
#!/bin/sh
# atrun uid=0 gid=0
# mail student 0
umask 22
XDG_VTNR=1; export XDG_VTNR
XDG_SESSION_ID=1; export XDG_SESSION_ID
HOSTNAME=desktop0.example.com; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
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:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin;export PATH
PWD=/; export PWD
LANG=en_US.UTF-8; export LANG
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
XDG_SEAT=seat0; export XDG_SEAT
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
OLDPWD=/home; export OLDPWD
cd / || {
echo ‘Execution directory inaccessible‘>&2
exit 1
}
${SHELL:-/bin/sh} << ‘marcinDELIMITER019ea5a8‘
echo "123"
echo "abc"
echo "can you see my, i am in my job"
marcinDELIMITER019ea5a8
[[email protected] /]# date
Sun Jun 25 15:47:30 CST 2017
4.2 crond指定周期性的計劃任務: 在指定的時間重復執行
保證服務開機是自動啟動,並且當前狀態也是運行狀態:
# systemctl is-enabled crond
enabled
[[email protected] ~]# systemctl status crond
crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
Active: active (running) since Sat 2014-07-19 09:19:39 CST; 27min ago
MainPID: 546 (crond)
如果不是開機啟動的,可以手工設定為開機自動啟動:
# systemctl enable crond
如果當前是inactive狀態的,需要馬上啟動該服務:
# systemctl start crond
每個用戶默認清情況下,都可以使用命令crontab設定計劃任務
# crontab -e
* * * * * date >> /tmp/date.txt 每分鐘
*/5 * * * * echo "uplooking" >> /tmp/upl.txt 每5分鐘執行一次
0 13 * * * /sbin/init 0 每天下午13點整
30 02 1,15 * * echo "crond jobs" >> /tmp/uplooking.txt 每個月1號,15號執行一次
時間的語法還有:
*/2 每2???
1,2,5
1-14
1-5,10-15
時間的取值範圍:
分鐘 0-59
小時 0-23
日 1-31
月 1-12
星期 0-7 ,0和7都是代表星期天
*/5 2 */3 * * 不管是星期幾,每月中,每隔3天的淩晨2點,每隔5分鐘執行一次
5月1日
02:00,02:05,02:10
5月3日
02:00,02:05,02:10,...02:58
# crontab -l 查看自己的計劃任務
# crontab -l -u student 管理員可以查看其他帳號的任務
# crontab -r 刪除當前用戶的所有計劃任務
可以通過查看日誌,判斷計劃任務是否被順利執行
# vim /var/log/cron
...
# cat /etc/cron.deny <----一個用戶名一行,表示那些用戶不能使用crontab命令編輯計劃任務
student
# vim /etc/cron.allow 該文件默認是沒有,裏面指定了哪些用戶可以使用命令制定計劃任務。如果該文件存在,那麽cron.deny就會失效
student
同時root可以直接編輯 /etc/crontab文件制定任務
# vim /etc/crontab
* * * * * root date >> /tmp/date.txt
*/2 * * * * student echo "i am student" >> /tmp/student.txt
*/5 * * * * root echo "uplooking" > /dev/null
^^^^^ 必須指定執行該任務的身份
* * * * * date >> ~/mycrondjob.txt
分鐘 小時 天 月 星期
[[email protected] /]# cat ~/mycrondjob.txt
Sun Jun 25 16:48:02 CST 2017
Sun Jun 25 16:49:01 CST 2017
[[email protected] /]# crontab -l
* * * * * date >> ~/mycrondjob.txt
[[email protected] /]# cat ~/mycrondjob.txt
Sun Jun 25 16:48:02 CST 2017
Sun Jun 25 16:49:01 CST 2017
[[email protected] /]# cat/var/spool/cron/root 會產生相應的文件
*/2 * * * * date >>~/mycrondjob.txt
4.3 管理臨時文件
開機運行服務systemd-tmpfiles-setup,該服務調用以下命令:
systemd-tmpfiles--create --remove 讀取以下配置文件:
/usr/lib/tmpfiles.d/*.conf,/run/tmpfiles.d/*.conf, and /etc/tmpfiles.d/*.conf
刪除需要刪除的文件、目錄,創建需要的目錄、文件,修復權限等
在長期開機運行的系統中,rhel7會有一個systemd-tmpfiles-clean.timer單元模塊保證定義執行以下命令對臨時文件進行管理:systemd啟動後,15分鐘後將運行systemd-tmpfiles-clean服務,並且每24小時候重復執行
systemd-tmpfiles--clean 該命令不會創建或修改文件目錄,只會刪除超過指定時間未被訪問過的文件
語法:tmpfiles.d(5)
#Type Path Mode UID GID AgeArgument
d /run/user 0755 root root 10d -
d 目錄不存在則創建
systemd-tmpfiles--create --remove 目錄不存在會自動創建,如果目錄存在,不管文件是否過期,都不會清空目錄
systemd-tmpfiles--clean 目錄不存在也不會創建,如果目錄存在,只會刪除目錄裏超過指定時間未被訪問過的文件
D 創建目錄或者清空目錄
systemd-tmpfiles--create --remove 目錄不存在會創建,如果目錄存在,不管文件是否過期,都會被清空
systemd-tmpfiles--clean 目錄不存在也不會創建,如果目錄存在,只會刪除目錄裏超過指定時間未被訪問過的文件
例子:
d/run/systemd/seats 0755 root root - 目錄不存在會自動建立,目錄存在,不會自動清空目錄 (除非最後一列 - 以時間代替)
D/home/student 0700 student student 1d 目錄不存在會自動建立,目錄存在,會清空目錄,當systemd-tmpfiles —-clean 會刪除已經超過一天沒有改變的文件
練習1:
更改/tmp/目錄的臨時文件默認管理選項。把配置文件從/usr/lib/tmpfiles.d/tmp.conf 拷貝到 /etc/tmpfiles.d/ ,並且把目錄的管理周期從10天修改成5天
# cp /usr/lib/tmpfiles.d/tmp.conf/etc/tmpfiles.d/
# vim /etc/tmpfiles.d/tmp.conf
d /tmp 1777 root root 5d <---把原來的10d修改成5d
編輯完畢,執行該命令,讓其應用新的配置選項
# systemd-tmpfiles --clean tmp.conf
練習:
假設 lee 服務(程序)會調用 臨時目錄/run/lee,要求該目錄下的內容超過30秒未被訪問都會被刪除,而且該目錄只有root可以讀寫
1、定義一個配置文件
# vim /etc/tmpfiles.d/lee.conf
d /run/lee 0700 root root 30s
測試
# systemd-tmpfiles --create lee.conf
--create發現目錄不存在,就會自動創建,如果目錄存在,會判斷權限是否正確,不正確會自動糾正
創建一個文件
# touch /run/lee/test
等待30秒
# sleep 30s
手工執行該命令,並且根據指定的配置文件進行管理臨時文件
# systemd-tmpfiles --clean lee.conf
# ls /run/lee/
本文出自 “HCIE_38xx” 博客,謝絕轉載!
RH134-04 計劃任務