ntpdate 命令
[root@Centos6~]#ntpdate 172.18.0.1 -------->ntpdate 命令跟服務器同步時間 18 Dec 21:16:25 ntpdate[7932]: step time server 172.18.0.1 offset 412750.511124 sec [root@Centos6~]#date 2017年 12月 18日 星期一 21:16:35 CST [root@Centos6~]#ll /usr/bin/at -rwsr-xr-x. 1 root root 54464 3月 22 2017 /usr/bin/at -------->具備SUID權限
cron 命令
- 週期性任務計劃:cron
相關的程序包:javascript
- cronie: 主程序包,提供crond守護進程及相關輔助工具
Cronie包含在預約時間運行指定程序的標準UNIX守護進程crond和相關工具。 它是原來的vixie-cron的一個分支,並具備像使用pam和SELinux同樣的安全和配置加強功能css
- cronie-anacron:cronie的補充程序,用於監控cronie任務執行情況,如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨後啓動一次此任務
anacron是cronie的一部分,用於按期運行的工做,沒有確切的執行時間。anacron的默認設置執行每日,每週和每個月的工做,可是anacron容許設置任意的工做週期。使用anacron能夠運行週期性做業,即便系統常常關閉,也能夠隨機執行做業執行時間,以更好地利用多個系統之間共享的資源java
- crontabs:包含CentOS提供系統維護任務
fedora主要使用這個包來經過cron來執行文件。crontabs軟件包包含root crontab文件和目錄。將須要安裝cron守護進程以從crontabs運行做業。cron守護程序(如cronie或fcron)會檢查crontab文件以查看特定命令什麼時候執行。 若是命令被安排,它執行它們。Crontabs處理一個基本的系統功能,因此它應該安裝在系統上linux
[root@Centos6~]#cat /etc/crontab ----------->查看系統計劃任務文件內容格式 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin ---------->PATH變量路徑,因此建議可執行程序建議寫全完整路徑 MAILTO=root HOME=/ # 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 11 10 * * * L wall hello [root@Centos6~]#cat /var/log/cron ----------->查看日誌文件 ........ Dec 19 10:11:01 Centos6 crond[2056]: (*system*) RELOAD (/etc/crontab) Dec 19 10:11:01 Centos6 CROND[8922]: (L) CMD (wall hello)
- 注意:命令執行的日期能夠由兩個字段指定 - 日期和星期幾。若是兩個字段都受限制(即不是 * ),則當任一字段與當前時間匹配時,將運行該命令。
例如,「30 4 1,15 * 5」將會在每月的1號和15號以及每一個星期五的凌晨4點30分執行命令。
若是就想既是1,15號而且是星期5,就須要在計劃任務後加腳本,在腳本內判斷是不是星期5,若是是星期五在執行腳本,這樣就能達到既是1,15號而且是星期5的需求[root@Centos6~]#day=`date +%w`;[ "$day" = "2" ] && echo 2 ---------->判斷今天是不是星期2 2
- 計劃任務時間表示法
1) 特定值:給定時間點有效取值範圍內的值
2) */10 給定時間點上有效取值範圍內的全部值 表示「每...」
3) 離散取值 :1,3,4
4) 連續取值 :1-5
5) 在指定時間範圍上:定義步長 /#: #即爲步長
6) 用'@'字符修正:
@reboot: 重啓後運行一次。
@yearly: 每一年運行一次,即。 0 0 1 1
@annually:每一年運行一次,即。 0 0 1 1
@monthly: 每個月運行一次,即。 0 0 1
@周: 每週運行一次,即。 0 0 0
@daily: 天天運行一次, 即。 0 0
@hourly: 每小時運行一次,即。 0
示例: 0 /3 * centos /bin/echo 「howdy」;/usr/bin/wall 「welcome!」 --------->每3小時echo和wall命令sql[root@Centos6app]#vim /etc/crontab 0 1 * * * root /bin/tar Jcf /app/backup`date +\%F -d "-1 day"`.tar.xz /etc &>/dev/null ------->%須要轉義 [root@Centos6app]#ll -h -rw-r--r--. 1 root root 6.2M 12月 19 01:00 backup2017-12-18.tar.xz [root@Centos6app]#cat /var/log/cron Dec 19 01:00:01 Centos6 CROND[10418]: (root) CMD (/bin/tar Jcf /app/backup`date +%F -d "-1 day"`.tar.xz /etc &>/dev/null) **注意:對於cron任務來說,% 有特殊用途;若是在命令中要使用 %, 則須要轉義,將 % 放置於單引號中,則可不用轉義**
- 確保crond守護處於運行狀態:
CentOS 7:systemctl status crond
CentOS 6:service crond statusvim[root@Centos7~]#service crond status -------這條舊命令其實引用的就是/bin/systemctl status crond.service 這條命令 Redirecting to /bin/systemctl status crond.service ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 日 2017-12-17 16:21:13 CST; 1 day 5h ago Main PID: 955 (crond) CGroup: /system.slice/crond.service └─955 /usr/sbin/crond -n [root@Centos7~]#systemctl status crond.service atd ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 日 2017-12-17 16:21:13 CST; 1 day 5h ago Main PID: 955 (crond) CGroup: /system.slice/crond.service └─955 /usr/sbin/crond -n 12月 17 16:21:13 Centos7.L systemd[1]: Started Command Scheduler. 12月 17 16:21:13 Centos7.L systemd[1]: Starting Command Scheduler... 12月 17 16:21:13 Centos7.L crond[955]: (CRON) INFO (RANDOM_DELAY will be scaled with f...d.) 12月 17 16:21:14 Centos7.L crond[955]: (CRON) INFO (running with inotify support) ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since 日 2017-12-17 16:21:13 CST; 1 day 5h ago Main PID: 958 (atd) CGroup: /system.slice/atd.service └─958 /usr/sbin/atd -f 12月 17 16:21:13 Centos7.L systemd[1]: Started Job spooling tools. 12月 17 16:21:13 Centos7.L systemd[1]: Starting Job spooling tools... Hint: Some lines were ellipsized, use -l to show in full.
系統的計劃任務
- anacron系統
運行計算機關機時cron不運行的任務,CentOS6之後版本 取消anacron服務,由crond服務管理
對筆記本電腦、臺式機、工做站、偶爾要關機的服務器及其 它不一直開機的系統很重要對頗有用
配置文件:/etc/anacrontab,負責執行/etc/ cron.daily /etc/cron.weekly /etc/cron.monthly中系統任務。centos字段1:若是在這些日子裏沒有運行這些任務......
字段2:在從新引導後等待這麼多分鐘後運行它
字段3:任務識別器,在日誌文件中標識
字段4:要執行的任務安全由/etc/cron.hourly/0anacron執行
當執行任務時,更新/var/spool/anacron/cron.daily 文件 的時間戳ruby[root@Centos6anacron]#cat /etc/anacrontab --------> 查看anacrontab配置文件信息 #/etc/anacrontab: configuration file for anacron #See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root #the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 #the jobs will be started during the following hours only START_HOURS_RANGE=3-22 #period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly`
/etc/crontab ----------> 計劃任務的總配置文件,只有root用戶能夠直接使用
[root@Centos6~]#ll /etc/crontab -rw-r--r--. 1 root root 456 12月 19 01:02 /etc/crontab /etc/cron.d/ 配置文件 ----------->計劃任務配置文件存放的位置,不建議所有都在/etc/crontab 文件中修改,以避免因任務過多,致使錯亂 [root@Centos6profile.d]#ll /etc/cron.d/ -rw-r--r--. 1 root root 113 8月 24 2016 0hourly -rw-------. 1 root root 108 1月 26 2017 raid-check -rw-------. 1 root root 235 3月 22 2017 sysstat /etc/cron.hourly/ -----------> 每小時須要執行的計劃任務存放位置,0anacron腳本就是anacron服務的配置文件, [root@Centos6~]#ll /etc/cron.hourly/ 因關機沒有執行的計劃任務,開機後每小時檢查一次,而後繼續執行相關計劃任務 -rwxr-xr-x. 1 root root 409 8月 24 2016 0anacron [root@Centos6~]#cat /etc/cron.hourly/0anacron #!/bin/bash # Skip excecution unless the date has changed from the previous run if test -r /var/spool/anacron/cron.daily; then day=`cat /var/spool/anacron/cron.daily` fi if [ `date +%Y%m%d` = "$day" ]; then exit 0; fi # Skip excecution unless AC powered if test -x /usr/bin/on_ac_power; then /usr/bin/on_ac_power &> /dev/null if test $? -eq 1; then exit 0 fi fi /usr/sbin/anacron -s /etc/cron.daily/ ----------->系統天天要執行的計劃任務,這些計劃任務都是軟件安裝時自動造成的腳本,須要系統天天執行的任務就會放到這個文件夾內 [root@Centos6profile.d]#ll /etc/cron.daily/ -rwx------. 1 root root 118 3月 22 2017 cups -rwx------. 1 root root 180 7月 10 2003 logrotate -rwx------. 1 root root 927 3月 22 2017 makewhatis.cron -rwx------. 1 root root 189 1月 26 2015 mlocate.cron -rwxr-xr-x. 1 root root 2126 7月 19 2013 prelink -rwxr-xr-x. 1 root root 563 11月 23 2013 readahead.cron -rwxr-xr-x. 1 root root 433 11月 7 2015 tmpwatch /etc/cron.weekly/ -----------> 每星期須要執行的計劃任務存放位置 /etc/cron.monthly/ -----------> 每個月期須要執行的計劃任務存放 [root@Centos6profile.d]#ll /etc/cron cron.d/ cron.deny cron.monthly/ cron.weekly/ cron.daily/ cron.hourly/ crontab
管理臨時文件
- CentOS6使用/etc/cron.daily/tmpwatch定時清除臨時文件
- CentOS7使用systemd-tmpfiles-setup服務實現
- 配置文件
/etc/tmpfiles.d/.conf
/run/tmpfiles.d/.conf
/usr/lib/tmpfiles/*.confbash - /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
corntab 命令:用戶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}
[root@Centos6~]#ls /var/spool/cron/L --------->普通用戶存放cron計劃任務配置文件的位置 /var/spool/cron/L [root@Centos6~]#crontab -l -u L --------->-l 選項只能查看本身的配置文件信息,若是須要查詢他人的,須要加-u 選項 * * * * * wall hello ---------> **配置內容不須要增長用戶信息這項** [root@Centos6cron]#ll /usr/bin/crontab ---------->**crontab 命令具備SUID權限** -rwsr-xr-x. 1 root root 51784 8月 24 2016 /usr/bin/crontab [root@Centos6anacron]#vim /etc/profile.d/env.sh --------> 默認crontab -e 配置內容使用的vi軟件,不具備vim功能,故能夠修改默認的軟件設置。 export EDITOR=vim [root@Centos6~]#ll /var/spool/cron/ -d drwx------. 2 root root 4096 12月 19 14:55 /var/spool/cron/
at 命令
- at、batch 命令是從標準輸入或指定的文件中讀取,將在稍後執行的命令
- batc命令將在系統負載水平降低到特定水平時執行命令
- atq 命令列出用戶的待處理做業,除非用戶是超級用戶;在這種狀況下,每一個人的工做都被列出來了。
- atrm 命令刪除由工做號碼標識的工做
[root@Centos6~]#chkconfig --list atd --------> Centos6 上查看at命令是否開機自動啓動 atd 0:關閉 1:關閉 2:關閉 3:啓用 4:啓用 5:啓用 6:關閉 [root@Centos6~]#runlevel 5 3 [root@Centos6~]#chkconfig atd on -------->若是不是開機啓動,就用這條命令設置爲開機啓動 [root@Centos7~]#systemctl is-enabled atd.service --------->Centos7 上查看at命令是否開機啓動 enabled [root@Centos7~]#systemctl enable atd
- 執行方式:
- 1)交互式 2)輸入重定向 3)at –f 文件
- 依賴與atd服務,須要啓動才能實現at任務
- at隊列存放在/var/spool/at目錄中
[root@Centos7~]#systemctl status atd ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since 日 2017-12-17 16:21:13 CST; 1 day 4h ago Main PID: 958 (atd) CGroup: /system.slice/atd.service └─958 /usr/sbin/atd -f ----------> 調用的就是/usr/sbin/atd 這個程序,958就是PID [root@Centos7~]#ps aux | grep atd root 958 0.0 0.0 25856 916 ? Ss 16:09 0:00 /usr/sbin/atd -f
[root@Centos6~]#at 21:25 ---------->交互式用法 at> wall ready to off work at> <EOT> job 1 at 2017-12-18 21:25 [root@Centos6~]#at -l 1 2017-12-18 21:25 a root [root@Centos6~]#ls /var/spool/at/ -l -rwx------. 1 root root 3232 12月 18 21:21 a000010180ede5 --------->執行後就會自動刪除文件 drwx------. 2 daemon daemon 4096 3月 22 2017 spool [root@Centos6~]#at 21:27 at> hostname --------->計劃任務沒法打印標準輸出內容,執行成功後的信息以郵件方式發給發起者 at> <EOT> job 3 at 2017-12-18 21:27 [root@Centos6~]#hostname Centos6.L You have mail in /var/spool/mail/root [root@Centos6~]#mail Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/root": 1 message 1 new >N 1 root Mon Dec 18 21:27 14/421 "Output from your job 3" & 1 Message 1: From root@Centos6.L Mon Dec 18 21:27:01 2017 Return-Path: <root@Centos6.L> X-Original-To: root Delivered-To: root@Centos6.L Subject: Output from your job 3 To: root@Centos6.L Date: Mon, 18 Dec 2017 21:27:01 +0800 (CST) From: root@Centos6.L (root) Status: R Centos6.L ---------> at命令執行成功的信息,因此計劃任務以及腳本建議標準輸出直接到&>/dev/null & [root@Centos6~]#at 21:37 <<EOF --------->在腳本中可使用這樣方法輸入配置 > wall Good night! --------->但建議把腳本的路徑添加上,由於默認的PASH變量路徑可能有必定出入 > EOF job 5 at 2017-12-18 21:37 [root@Centos6~]#at -c 5 --------->查看at計劃任務的信息 #!/bin/sh # atrun uid=0 gid=0 .......... PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH ------->變量地址 ${SHELL:-/bin/sh} << 'marcinDELIMITER3692b1dd' wall Good night! marcinDELIMITER3692b1dd [root@Centos6~]#echo -e "wall at job3\nwall at jobs4\nwall at jobs5"| at 21:45 job 6 at 2017-12-18 21:45 [root@Centos6~]#at -l 6 2017-12-18 21:45 a root [root@Centos6~]#at -c 6 ........ wall at job3 wall at jobs4 wall at jobs5 [root@Centos6~]#at 21:48 -m ----------->發送郵件確認 at> how are you at> <EOT> job 7 at 2017-12-18 21:48 [root@Centos6~]#at -l 7 2017-12-18 21:48 a root [root@Centos6~]#mail Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/root": 2 messages 1 new >N 2 root Mon Dec 18 21:48 14/453 "Output from your job 7" & 2 ...... Subject: Output from your job 7 --------->來自第7個計劃任務
- at.allow (白名單)、at.deny(黑名單)
超級用戶能夠在任何狀況下使用這些命令。對於其餘用戶,使用的權限由文件/etc/at.allow和/etc/at.deny肯定
若是文件/etc/at.allow存在,則只容許在其中說起的用戶名在
若是/etc/at.allow不存在,則檢查/etc/at.deny,而後容許在其中未說起的每一個用戶名使用at
若是不存在,則只容許超級用戶使用 at 命令,一個空的/etc/at.deny意味着每一個用戶均可以使用這些命令,這是默認配置
[root@Centos6~]#cat /etc/at.deny ---------->默認黑名單爲空,全部用戶均可以用at命令制定計劃任務 [root@Centos6~]#cat /etc/at.allow ---------->默認沒有白名單這個文件,若是使用須要手工建立 cat: /etc/at.allow: 沒有那個文件或目錄
-
經常使用參數
-m 當任務被完成以後,將給用戶發送郵件,即便沒有標準輸出
-M 永遠不會發送郵件給用戶
-f 從指定的文件讀取做業而不是標準輸入
-l 是atq的別名
-r 是atrm的別名
-d 是atrm的別名
-v 顯示在閱讀做業以前做業將被執行的時間。顯示的時間將採用格式「Thu Feb 20 14:50:00 1997」
-c 將命令行上列出的做業捕獲到標準輸出(查看具體的做業任務) - 示例
- at命令接受HH:MM形式的時間在一天的特定時間託管一個工做。(若是時間已通過去,則假定是次日)。
- 也能夠指定午夜,中午或下午茶時間(下午4點),而且能夠在上午或下午晚間。
- 也能夠經過在選擇年份的月份名稱日期中給出日期,或者給出MMDDYY或MM / DD / YY或DD.MM.YY或YYYY的日期來講明工做將在哪一天運行-MM-DD。
- 日期的規格必須遵循當天的規格。也能夠給出像如今這樣的時間+計算時間單位,其中時間單位能夠是幾分鐘,幾小時,幾天或幾周,
HH:MM 02:00
在今日的 HH:MM 進行,若該時刻已過,則明天此時執行任務
HH:MM YYYY-MM-DD 02:00 2016-09-20
規定在某年某月的某一天的特殊時刻進行該項任務
HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrowHH:MM[am|pm] + number [minutes|hours|days|weeks]
在某個時間點再加幾個時間後才進行該項任務
now + 5 minutes
02pm + 3 days
at和crontab 對比
- 一次性做業使用 at
- 重複性做業使用crontab
Create at time crontab -e List at -l crontab -l Details 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
vi all.sh f1.sh& f2.sh& f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
方法3
{ f1.sh& f2.sh& f3.sh& }
一、天天的2點和12點整,將/etc備份至/testdir/backup目 錄中,保存的文件名稱格式爲「etcbak-yyyy-mm-dd-HH.tar.xz」 0 2,12 * * * root /bin/tar Jcf /testdir/backup/etcbak`date +\%Y-\%m-\%d-\%H`.tar.xz /etc &>/dev/null 二、每週2, 4, 7備份/var/log/messages文件至/logs目錄中 ,文件名形如「messages-yyyymmdd」 0 0 * * 2,4,7 root /bin/tar Jcf /logs/messages-`date +\%F` /var/log/messages &>/dev/null 三、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中 0 */2 * * * root cat /proc/meminfo | egrep "^S|^M" >> /tmp/meminfo.txt 四、工做日時間,每10分鐘執行一次磁盤空間檢查,一旦發現 任何分區利用率高於80%,就執行wall警報 */10 0 * * 1-5 root /app/disk.sh -------->因命令內容過多,建議寫到一個簡單腳本中,腳本內容以下 /app/disk.sh disk=`df | grep "/dev/sd" | sort -r | head -n1` [ "$disk" > 80% ] && wall "disk will be full"