本文涉及到的命令主要有:
1、作業管理:? ?jobs、??ctrl+Z(按鍵)、 fg 、 bg、 kill、 killall、 nohup、 screen
2、任務計劃:? ?at、 crontab、? sleep
一、Linux作業管理
- ? ? Linux的作業控制
前臺作業:通過終端啟動,且啟動后一直占據終端;
后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
- ? 讓作業運行于后臺
運行中的作業: Ctrl+z (會自動轉為休眠模式)
尚未啟動的作業: COMMAND &
- ? 查看當前終端所有作業:jobs
查看到的后臺作業中,顯示有+ –的,如果用 fg 命令后面不指定作業號時,+為默認調用的第一個作業,–為第二個作業,越早送到后臺的作業,默認越晚被調回
- ? 作業控制:
fg? ?[JOB_NUM]? ? ?把指定的后臺作業調回前臺
bg? [JOB_NUM]? ? ?讓送往后臺的作業在后臺繼續運行
kill [%JOB_NUM]? ???終止指定的作業(這里作業號前面一定要加%,否則會與 kill 的命令沖突)
killall -19?COMMAND? 將后臺作業轉入休眠模式
killall -18 COMMAND? 將后臺作業轉入運行模式
- 后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望送往后臺后,剝離與終端的關系
nohup COMMAND? [&>/dev/null]? &? ?(如果不加中括號里的重定向,則執行命令后的標準輸出及錯誤會追加至nohup.out)
screen? ;? ?COMMAND? ? ? (開啟分屏會話,然后執行任務,screen -r 恢復回話)
二、并行運行
同時運行多個進程,提高效率
- ?方法1 :編輯腳本,將要執行的任務寫入腳本
? ?vi all.sh
f1.sh?&
f2.sh?&
f3.sh?&
- ?方法2? :小括號
(f1.sh &);(f2.sh &);(f3.sh &)
- ?方法3? : 大括號
{? f1.sh &? f2.sh &? f3.sh &? }
三、任務計劃
定時執行一次任務:at
周期性運行任務:cron
(共同點:沒有被重定向的輸出和錯誤以郵件通知給相關用戶;根用戶能夠修改其它用戶的作業)
- 共同點:運行結果的標準輸出和錯誤以郵件通知給相關用戶
COMMAND > /dev/null? ?則執行正確之后,不發送執行結果;但執行錯誤還是會發送郵件
COMMAND &> /dev/null? ?則執行結果無論對錯都不發送郵件
at一次性任務
- 包:at
? ? ? ? 需要啟動atd服務,才能實現at任務。
centos6啟用:service atd start
centos7啟用:systemctl start atd
- ?at命令:at [option] TIME
?常用選項:
-V? ? 顯示版本信息
-l? ? ? 列出指定隊列中等待運行的作業;相當于atq (at隊列存放在/var/spool/at/目錄中)
-d #? ? 刪除指定的作業;相當于atrm
-c #? ? ?查看具體作業任務
-f /path/from/somefile? ? ? 從指定的文件中讀取任務
-m? ? ?當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出
- ?TIME? ? 定義出什么時候進行 at 這項任務的時間
HH:MM [YYYY-mm-dd]? (如14:00 [2018-05-06] )
noon(中午12點), midnight(晚上12點), teatime(下午4點)
tomorrow
now+#{minutes,hours,days, OR weeks}? ?(如 now + 3 minutes)
- 執行方式:
1)交互式? ?(如 :輸入 at now + 1 minutes 回車后系統會等待輸入任務,輸入完成后 ctrl + d提交)
2)輸入重定向? (如:echo ping 8.8.8.8 | at now + 1 minutes,或 at now + 1 minutes <?/path/from/somefile? )
3)at –f? /path/from/somefile
- at任務的用戶控制功能
/etc/at.{allow,deny}控制用戶是否能執行at任務
白名單:/etc/at.allow 默認不存在;如果建立白名單,只有該文件中的用戶才能執行at命令
黑名單:/etc/at.deny 默認存在,拒絕該文件中用戶執行at命令,而沒有在at.deny 文件中的使用者則可執行
如果兩個文件中有同一個用戶,則白名單優先;
如果兩個文件都不存在,只有 root 可以執行 at 命令。
cron周期性任務
- 相關的程序包:
cronie: 主程序包,提供crond守護進程及相關輔助工具
cronie-anacron:cronie的補充程序,用于監控cronie任務執行狀況,如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨后啟動一次此任務。(家用電腦由于關機會有這方面問題,生產中服務器不關機一般不會影響周期任務執行,了解即可)
crontabs:包含CentOS提供系統維護任務
- 確保crond守護處于運行狀態:
CentOS 7:? ?systemctl status crond
CentOS 6:? ?service crond status
- 1)系統cron任務:系統維護作業? ???/etc/crontab
- 2)用戶cron任務:crontab命令
日志:/var/log/cron? (追蹤周期任務,誤刪任務時可根據日志找回)
- 對于cron任務來講,%有特殊用途,如果在命令中要使用%,則需要轉義,或放置于單引號,或寫入腳本中然后調用此腳本。
1)系統cron任務:系統維護作業? ???/etc/crontab
- 直接編輯?/etc/crontab 文件 ,格式如下圖所示:
例:30 21 * * *? ?root? ?/bin/echo “nihao”? ? 每天晚上9點30分執行echo命令
- 時間表示法:
- ?特定值:給定時間點有效取值范圍內的值
- *? ? 給定時間點上有效取值范圍內的所有值,表示“每…”? ? (如:*? 02? *? *? *? 表示每天2點每分鐘執行任務)
- #,#,#? ?離散取值? ? (如:0? 2? 1,3,5? *? *? ?表示每個月1號3號5號的2點00分執行任務)
- #-#? ??連續取值? ? (如:0? 2? 1-5? *? *? ?表示每個月1號到5號的2點00分執行任務)
- /#? ?在指定時間范圍上,定義步長??(如:0? */3 *? *? *? ?表示每天每3個小時執行任務)
- 特定的時間格式:
? ? ? ? ? ? ? ? @reboot ? ? 表示每次重啟之后運行一次
@yearly ? ? 表示每年運行一次,功能相當于 0 0 1 1 *
@annually ??表示每年運行一次,功能相當于0 0 1 1 *
@monthly ? ?表示每月運行一次,功能相當于0 0 1 * *
@weekly ? ??表示每周運行一次,功能相當于0 0 * * 0
@daily ? ? ?表示每天運行一次,功能相當于0 0 * * *
@hourly ? ??表示每小時運行一次,功能相當于0 * * * *
- 在秒級別運行任務:結合 sleep 命令
sleep NUMBER[SUFFIX]…
SUFFIX:
s: 秒, 默認
m: 分
h: 小時
d: 天如:* * * * * wall 1 ; sleep 20; wall 2 ; sleep 20 ; wall 3 表示每個廣播任務之間間隔20秒。
- 系統的計劃任務:
/etc/crontab
/etc/cron.d/ 配置文件
/etc/cron.hourly/ 腳本
/etc/cron.daily/ 腳本
/etc/cron.weekly/ 腳本
/etc/cron.monthly/ 腳本
- 管理臨時文件:
CentOS6使用/etc/cron.daily/tmpwatch定時清除臨時文件
CentOS7使用systemd-tmpfiles-setup服務實現
2)用戶cron任務:crontab命令
crontab命令定義:每個用戶都有專用的cron任務文件: /var/spool/cron/USERNAME
- crontab命令: crontab [-u user] [-l | -r | -e] [-i]
-l? ? 列出所有任務
-e? ? 編輯任務
-r? ? 移除所有任務
-i? ? 同-r一同使用,以交互式模式移除指定任務
-u user? ? 僅root可運行,指定用戶管理cron任務
- 控制用戶執行計劃任務:
/etc/cron.{allow,deny}? ?(性質同 at 任務的黑白名單,如果一個用戶之前不在黑名單,后來加入黑名單,那他之前所創建的周期任務依然會定期執行)
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97658