1. 程式人生 > >RH134-04 計劃任務

RH134-04 計劃任務

rhce

第四章、計劃任務

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 1600

noon+4 days

5pmaugust 3 2016

07190937 <---71909:37

07190937 <---71909: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 ,07都是代表星期天

*/5 2 */3 * * 不管是星期幾,每月中,每隔3天的淩晨2,每隔5分鐘執行一次

51

02:00,02:05,02:10

53

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.d5

#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 計劃任務