一、作業管理
Linux 的作業控制 前臺作業:通過終端啟動,且啟動后一直占據終端; 后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
如何讓作業運行于后臺?
(1) 運行中的作業: Ctrl+z (2) 尚未啟動的作業:# COMMAND &后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望送往后臺后,剝離與終端的關系 # nohup COMMAND & # screen;COMMAND查看所有作業: # jobs
作業控制:
# fg [[%]JOB_NUM] :把指定的后臺作業調回前臺;# bg [[%]JOB_NUM] :讓送往后臺的作業在后臺繼續運行;# kill [%JOB_NUM] :終止指定的作業;
并行運行
同時運行多個進程,提高效率vi all.shf1.sh& f2.sh& f3.sh& (f1.sh&);(f2.sh&);(f3.sh&)
# (echo 1&);(echo 2&);(echo 3&)
{ f1.sh& f2.sh& f3.sh& }
二、任務計劃
Linux 任務計劃、周期性任務執行 ? 未來的某時間點執行一次任務: at batch :系統自行選擇空閑時間去執行此處指定的任務(可執行腳本) ? 周期性運行某任務: cron
at 任務
安裝并啟動at任務
# yum install -y at# runleve 查看系統服務等級# chkconfig --list atd # chkconfig --level 3 atd on 啟動服務# ntsysv GUI服務管理# setup GUI服務管理
at 命令:at [option] TIME
常用選項:
-V 顯示版本信息: -l: 列出指定隊列中等待運行的作業;相當于atq -d: 刪除指定的作業;相當于atrm -c: 查看具體作業任務 -f /path/from/somefile :從指定的文件中讀取任務 -m: 當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出 -q QUEUE:指明隊列注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶
TIME: 定義出什么時候進行at這項任務的時間
HH:MM [YYYY-mm-dd] noon, midnight, teatime (4pm) tomorrownow+#{minutes,hours,days, OR weeks}
ctrl + d ;保存任務退出
at 時間格式
HH:MM 02:00在今日的HH:MM進行,若該時刻已過,則明天此時執行任務
HH:MM YYYY-MM-DD
04:00 2016-09-20 規定在某年某月的某一天的特殊時刻進行該項任務
HH:MM[am|pm] [Month] [Date]
04pm March 1717:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某個時間點再加幾個時間后才進行該項任務 now + 5 minutes 04pm + 3 days
at 任務
執行方式:1)交互式 2)輸入重定向 3)at –f 文件 依賴與atd服務,需要啟動才能實現at任務
at隊列存放在/var/spool/at 目錄中
通過/etc/at.{allow,deny}控制用戶是否能執行at 任務
先尋找/etc/at.allow文件,文件 中的使用者才能使用at,沒有在這個文件中的使用者則不能使用at(即使沒有寫在at.deny當中) 如果/etc/at.allow不存在,就尋找/etc/at.deny這個文件,若寫在這個at.deny用的使用者則不能使用 at ,而沒有在這個at.deny文件中的使用者則可使用at命令。 如果兩個文件都不存在有,只有 root 用可以使用at這個命令。 touch /etc/at.allow
/etc/at.allowlvasu tom
周期性任務計劃cron
相關的程序包:cronie:主程序包,提供crond守護進程及相關輔助工具 cronie-anacron:cronie 的補充程序;用于監控cronie任務執行狀況;如cronie中的任務在過去該運行的時間點未能正常運行,則anacron 會隨后啟動一次此任務 crontabs:包含CentOS提供系統維護任務
計劃任務
確保crond 守護處于運行狀態: CentOS 7: systemctl status crond CentOS 6: service crond status 計劃周期性執行的任務提交給crond,到指定時間會自動運行。他需要使用專用的配置文件,此文件有固定的格式,不建議使用文本編輯器直接編輯此文件;要使用crontab命令。 系統cron 任務:系統維護作業 /etc/crontab 用戶cron 任務: crontab 命令
日志:/var/log/cron
系統cron 任務:/etc/crontab
注釋行以 # 開頭詳情參見 man 5 crontab 系統CRON的配置格式: SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # 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例如:晚上9 點10 分運行echo 命令; 10 21 * * * centos /bin/echo "Howdy!" 注意: (1)每一行定義一個周期性任務: * * * * * :定義周期性時間 user-name :要運行任務的用戶身份 command to be executed:任務 (2)此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量 (3)執行結果郵件發送MAILTO指定的用戶
用戶CRON的配置格式:/var/spool/USERNAME
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 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 # | | | | | # * * * * * command to be executed 注意: (1)每一行定義一個corn任務,共6個字段 (2)此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量 (3)執行結果郵件發送當前用戶
計劃任務
時間表示法: (1) 特定值; 給定時間點有效取值范圍內的值 注意:day of week 和 day of month 一般不混合使用 執行結果是或的關系 (2) * 給定時間點上有效取值范圍內的所有值 表示“每...” 3****:每小時任務,每小時的第三分鐘 34**5:每周執行一次,每周5的4點3分 567**:每月執行一次,每月的7號6時5分 78910*:每年執行一次,每年的10月9號8時7分 (3) 離散取值: #,#,# 在時間點上使用逗號分隔的多個值 98**3,7:每周三和周日8時9分 18,20**3,7:沒周三和周日的8時和20時 (4) 連續取值:- #-# 09-18**1-5 (5) 在指定時間范圍上,定義步長: /#: # 即為步長 注意: (1)指定的時間點不能被步長整除時,其意義將不復存在 (2)最小時間單位為分鐘,想完成秒級任務,需要額外借助其他幾只 定義沒分鐘任務:利用腳本實現在沒分組之內,循環執行多次 例如:每3小時echo 命令; 0 */3 * * * centos /bin/echo "howdy!" */5****:每五分鐘執行一次某任務
時間格式
@reboot Run once after reboot.@yearly 0 0 1 1 *@annually 0 0 1 1 *@monthly 0 0 1 * *@weekly 0 0 * * 0@daily 0 0 * * *@hourly 0 * * * *
計劃任務
? 系統的計劃任務:/etc/crontab/etc/cron.d/ 配置文件/etc/cron.hourly/ 腳本/etc/cron.daily/ 腳本/etc/cron.weekly/ 腳本/etc/cron.monthly/ 腳本
anacron 系統
運行計算機關機時cron不運行的任務,CentOS6.0 以后版本取消anacron服務,由crond服務管理。 假設計算機沒有一直開機 對筆記本電腦、臺式機、工作站及其它不一直開機的系統很重要 對偶爾要關機的服務器很有用 配置文件:/etc/anacrontab,負責執行/etc/cron.daily /etc/cron.weekly /etc/cron.monthly中系統任務。 /etc/cron.hourly/ 由/cron.d/0hourly 執行 ? 字段1 :如果在這些時間里沒有運行這些任務…… ? 字段2 :在重新引導后等待這么多分鐘后運行它 ? 字段3 :任務識別器,在日志文件中標識 ? 字段4 :要執行的任務 ? 當執行任務時,更新/var/spool/anacron/ 文件時間戳
管理臨時文件
rhel6.0使用/etc/cron.daily/tmpwatch定時清除臨時文件。 rhel7.0 使用systemd-tmpfiles-setup 服務實現
配置文件:
/etc/tmpfiles.d/*.conf /run/tmpfiles.d/*.conf /usr/lib/tmpfiles/*.conf /usr/lib/tmpfiles.d/tmp.conf d /tmp 1777 root root 10d d /var/tmp 1777 root root 30d
命令:
systemd-tmpfiles –clean|remove|create configfile
計劃任務
用戶cron: 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} lvasu
at 和crontab
用一次性作業使用 at 重復性作業使用crontab Create at time crontab -eList at -l crontab -lDetails at -c jobnum N/A Remove at -d jobnum crontab -r Edit N/A crontab -e沒有被重定向的輸出會被郵寄給用戶 根用戶能夠修改其它用戶的作業
計劃任務
注意:運行結果的標準輸出和錯誤以郵件通知給相關用戶 (1) COMMAND > /dev/null (2) COMMAND &> /dev/null對于cron任務來講,%有特殊用途;如果在命令中要使用%, 則需要轉義;不過,如果把%放置于單引號中,也可以不用轉義
計劃任務
思考: (1) 如何在秒級別運行任務? * * * * * for min in 0 1 2; do echo "hi"; sleep 20;done (2) 如何實現每7 分鐘運行一次任務?
sleep 命令
sleep NUMBER[SUFFIX]... SUFFIX: s: 秒, 默認 m: 分 h: 小時 d: 天
積累應用
1、每周2, 4, 7 備份/var/log/messages 文件至/logs目錄中,文件名形如“messages-yyyymmdd” /etc/crontab0 0** 2,4,7 tar cf /logs/messages-`date +%Y%m%d` /var/log/messages 2 、每兩小時取出當前系統/proc/meminfo 文件中以S或M開頭的信息追加至/tmp/meminfo.txt 文件中 crontab -e 5 */2 *** grep '^[SM].*' /proc/meminfo >> /tmp/meminfo.txt
原創文章,作者:lvasu,如若轉載,請注明出處:http://www.www58058.com/45909
圖片有些無法正常顯示,