linux任務計劃cron,chkconfig工具,systemd管理服務,unit介紹,target介紹
linux任務計劃cron
- 任務計劃能夠在指定的時間段
- 執行預先設置好的命令或者腳本

- 如圖,cat /etc/crontab 查看任務計劃配置文件內容
- crontab 文件裏面定義了3個變量
- 分別是 SHELL,PATH,MAILTO
- SHELL 就是執行命令使用的shell是哪一個,這裏是bash
- PATH 是環境變量,執行命令的時候
- 若是命令路徑不是絕對路徑,就會在這些環境變量的目錄裏面
- 尋找命令或者腳本文件
- MAILTO 是發送郵件給誰的變量,這裏是 root

- 如圖,配置文件下面是 任務計劃的格式
- 第一個星號 * 能夠設置分鐘,設置的範圍是 0-59
- 第二個星號 * 能夠設置小時,設置範圍是 0-23
- 第三個星號 * 能夠設置每個月幾號,設置範圍是 1-31
- 第四個星號 * 能夠設置月份,設置範圍是 1-12 或者 jan,feb等月份英文簡寫代替數字
- 第五個星號 * 能夠設置星期幾,設置範圍是 0-6
- 或者使用英文簡寫 sun,mon,tue 代替數字
- 其中 星期天 比較特殊,可使用數字 0 或者 7 表示
- 前面的星號 * 能夠設置不一樣的時間
- 設置完時間,後面接 執行命令的用戶名稱,就是 user-name
- 而後是被執行的 命令 或者 腳本 的路徑
- 在 root 用戶下寫任務計劃,若是不寫 user-name
- 那麼默認的用戶名稱就是 root
- 命令 crontab -e 能夠定義任務計劃

- 使用 crontab -e 進入任務計劃編輯,操做跟vi同樣,按 i 開始編輯
- 如圖,0 3 * * * /bin/bash /usr/local/sbin/123.sh
- 這條命令是定義了一個天天3點0分執行123.sh腳本的任務計劃
- 首先 0 表示第 0 分鐘,3表示天天第3個小時,也就是3點
- 合起來就是 3點0分
- 後面 * 表示所有,不寫數字,寫 * 就表明全部的意思
- 第3個* 表示每個月幾號,這裏是 * ,就表示每月全部的日期
- 若是寫一個數字,就表示特指那一天,寫 * 就表示這個月的每一天
- 第4個* 表示月份,範圍是 1-12 月,這裏寫 * 也表示所有
- 若是寫一個數字,表示特指某一個月,寫 * 就表示包含全部的月份
- 第5個* 表示星期幾,這裏寫 * 表示包含一個星期的每一天
- /bin/bash 是指執行腳本用到的 shell
- /usr/local/sbin/123.sh 就是腳本的絕對路徑
- 這裏沒有寫執行的用戶名稱,那麼就是默認的用戶 root
- 因此這個任務命令的意思就是
- 每月,天天,3點,0分 ,不論是星期幾,都執行 123.sh 腳本

- 如圖後面還能夠寫 >>/tmp/123.log 2>>/tmp/123.log
- 這是把執行腳本產生的日誌信息追加劇定向到 123.log
- 後面的 >>/tmp/123.log 表示把執行腳本的日誌信息追加劇定向到 123.log
- 而後 2>>/tmp/123.log 表示把執行腳本的錯誤信息追加劇定向到 123.log
- 符號 >> 能夠追加通常日誌信息,2>>能夠追加錯誤信息

- 如圖,把第3個* 修改成 1-10
- 每一個 * 的位置,除了可使用單個數字外,還能夠指定一個範圍
- 好比這裏 第3個* 表示每月的 1-31號,1-10 就表示 1號到10號 這個範圍
- 這樣修改以後,每月除了1-10號以外,就不會再執行這個腳本了

- 如圖,還能夠這樣使用
- 第4個* 的位置,修改成 */2 意思是,能夠整除 2 的月份纔會執行腳本
- 第5個* 的位置,修改成 2,5 意思是 星期二 和 星期五纔會執行腳本
- 因此整條命令的意思就是
- 整除2的月份,也就是雙數月份,1-10號,3點0分,星期二或者星期五 執行腳本
- 第5個* 的位置,除了寫單個數字,也能夠寫多個數字
- 好比 1,2,3 這樣,不一樣數字之間使用 , 分隔
- 時間設置這裏不能夠設置年份,可是實際上仍是能夠指定某一年的某個時間執行命令
- 使用 星期 就能夠肯定某一天的惟一性
- 好比今年的6月18號,和明年的6月18號,星期幾 必定是不同的
- 因此設置星期幾就能夠肯定是 今年的6月18執行命令,仍是明年的6月18執行命令

- 要使用任務計劃,須要啓動任務計劃服務,使用上圖命令啓動服務

- 要肯定服務是否啓動成功,可使用上圖命令查看進程
- 如圖,下面有 /usr/sbin/crond -n 的進程在運行,說明啓動成功

- 如圖,使用命令 systemctl status crond 查看 crond 的狀態
- 能夠看到 綠色的字 active(running) 表示已經在運行了,說明服務啓動成功

- 如圖,若是關閉crond服務,再查看服務的狀態
- 能夠看到,以前綠色字的位置,變成了 inactive(dead) 就表示服務沒有在運行
- 不少人遇到過這個問題,讓任務計劃執行一個腳本,可是最後任務計劃並無執行
- 根據經驗,頗有多是執行的腳本里面有一些問題
- 好比腳本里面執行 iptables 這個命令
- 若是讓任務計劃執行這個腳本,任務計劃會在 環境變量 的目錄裏面
- 尋找 iptables 這個命令,若是找不到,這個腳本就執行不了
- 有兩個辦法解決
- 一個是把 iptables 命令文件的目錄,加入到crontab配置文件的環境變量裏面
- 第二個是腳本里面的命令,都使用絕對路徑來寫
- 好比,iptables 命令,不寫 iptables 這樣沒有路徑的命令
- 而是寫 /usr/sbin/iptables 這樣的命令文件絕對路徑

- 如圖,這個腳本設置了一個變量 ipt
- ipt 的值是 /usr/sbin/iptables ,這就是iptables命令文件的絕對路徑
- 而後後面的命令都是使用 ipt 來執行的
- 這樣就不會出現找不到命令路徑的問題了
- 通常來講不要修改crontab配置文件的環境變量
- 因此腳本最好仍是使用命令的絕對路徑來寫
- 每設置一個任務計劃,應該在後面把任務日誌追加劇定向到一個文件裏面
- 這樣若是一個任務計劃出現了一些問題,就能夠查看任務日誌查找問題緣由

- 如圖,crontab -l 就能夠看到目前有什麼任務計劃
- 關於任務計劃的備份

- 如圖,crontab -l 就是 列出任務計劃的意思
- crontab -l 列出的內容實際上保存在一個文件裏面
- cat /var/spool/cron/root 能夠看到,內容與crontab -l 列出的內容一致
- 目錄 /var/spool/cron/ 裏面保存了不一樣用戶的任務計劃文件
- root用戶的任務計劃文件就是 root,若是是別的用戶
- 任務計劃文件的名稱也跟別的用戶名稱是一致的
- 因此,要備份用戶任務計劃,到/var/spool/cron/ 目錄下面
- 找到本身要備份的用戶的任務計劃,複製一份保存好就好了
- crontab 命令還有不一樣的選項
- crontab -r 表示刪除任務計劃
- 如圖,執行crontab -r 以後,再執行 crontab -l 能夠發現任務計劃沒有了
- 下面顯示 no crontab for root 表示任務計劃已經沒有了
- crontab -u root -l 能夠顯示指定用戶的任務計劃
- 參數 -u 能夠指定用戶名稱,後面接用戶名稱 root
chkconfig工具
- chkconfig 是一個管理服務的工具
- 不過 centOS7 已經不使用這個工具對服務進行管理了
- 可是若是工做中使用的是舊版本的 centOS
- 就須要用到 chkconfig工具來管理服務

- 如圖,chkconfig --list 能夠查看chkconfig工具管理的服務
- 能夠看到只有兩個服務,可是以前啓動了 crond 服務,這裏沒有顯示
- 看中文說明,該輸出結果只顯示 SysV 服務
- SysV 服務是指並不是 centOS7 原生的服務
- 舊版centOS服務就是屬於 SysV 服務
- centOS7 原生的服務屬於 systemd 服務
- 這裏不顯示 systemd 服務,因此看不到 crond 服務

- 每一個服務都有它的腳本存在
- chkconfig 看到的兩個服務的腳本的存放目錄就是
- ls /etc/init.d/ 能夠看到目錄下面,有這兩個服務名稱的文件存在
- 這就是這兩個服務的腳本文件

- 如圖,0,1,2,3,4,5,6 表示linux的7個運行級別
- 0 表示關機,1 表示單用戶模式
- 2 表示沒有 nfs 服務的,多用戶,無圖形界面的模式
- 3 表示有 nfs 服務的,多用戶,無圖形界面的模式
- 4 是一個保留的級別,暫時沒用
- 5 表示多用戶的,有圖形界面的模式
- 6 表示重啓

- 如圖,修改這個文件,能夠定義系統默認的運行級別
- 若是把系統默認運行級別修改成 1 ,那麼一開機就會進入單用戶模式
- 若是默認級別修改成6 ,那麼啓動後就會重啓,這樣就進入不了系統了
- 不過 centOS7 開始已經再也不使用這個文件來定義默認運行級別

- 如圖,使用 chkconfig network off 改變network的狀態
- 再查看服務,能夠看到,network 在 2-5 級別都是 關 的狀態
- 這表示,系統在這幾個運行級別中,這個服務都是關閉的狀態

- 如圖,使用命令 chkconfig network on
- 再查看服務狀態
- 能夠看到,運行級別 2-5 都顯示爲開
- 這表示,系統運行在這幾個級別的時候,這個服務是開啓狀態

- 如圖,能夠指定服務在某一個運行級別關閉
- chkconfig --level 3 network off
- 這樣就指定了 network服務 在3級別時關閉
- chkconfig --list 查看,3 後面是 關

- 如圖,還能夠同時設置不一樣運行級別爲關閉狀態
- chkconfig --level 35 network off
- 就能夠同時設置 級別 3 和 級別 5 的時候,服務爲關閉狀態
- 下面 chkconfig --level 345 network on
- 能夠同時設置 服務 在運行級別 3,4,5 都爲開啓狀態
- 0表明關機狀態,1表明單用戶模式,6表明重啓狀態
- 這 3 個狀態都是不可能運行服務的,因此這3個狀態只能設置爲關

- ls 查看 /etc/init.d 目錄
- 使用 cp network 123 把network文件複製一份,並更名爲123
- 再ls 查看,能夠看到多了一個 123文件
- 如今要把 123 腳本加入到 chkconfig 裏面運行

- 如圖 chkconfig --addd 123 這樣就能夠把123腳本加入chkconfig了
- chkconfig --list 查看運行的服務
- 能夠看到,多了 123 服務
- 使用 vim 打開 123 文件

- 自定義加入 chkconfig 的腳本文件,必須符合特定的格式才行
- 如圖 ! /bin/bash 表示這是shell腳本
- 而後 chkconfig: 2345 10 90
- 2345表示在這些運行級別能夠運行
- 10表示運行順序,第10位運行
- 90表示 第90位關閉
- description 表示 腳本描述
- chkconfig 和 description 信息都是必需要有的
- 這樣文件才能被 chkconfig 識別

- 能夠添加服務,也能夠刪除服務
- 使用 chkconfig --del 123 就能夠把123服務從chkconfig刪除
- 使用 chkconfig --list 查看
- 能夠看到 123 服務沒有了
- chkconfig 主要是用在 舊版本的centOS 上面的
- 從 centOS 7 開始已經再也不使用了
systemd管理服務
- 從 centOS7 開始,系統服務的管理工具是 systemd

- 如圖,使用 systemctl list-unit-files 查看全部服務

- 如圖,查看全部服務,不僅有service,還有socket,target等進程

- 除了 systemctl list-unit-files 能夠查看服務外
- 還可使用 systemctl list-units --all --type=service 查看進程
- 這條命令主要是查看 service 類型的進程

- 如圖,列出的全部進程都是service類型的
- 最右邊一列,是進程的描述信息
- 若是不使用參數 --all
- systemctl list-units --type=service

- 如圖,能夠看到,把 --all 參數去掉後
- 列出來的 service ,在ACTIVE那一列都是 active 的狀態,表示在運行
- 若是使用 --all,就會把狀態爲 inactive 的service 也列出來
- inactive 表面沒有在活動的狀態

- 如圖,systemctl enable crond 或者 crond.service
- crond 能夠加 .service 也能夠不加
- 這條命令可讓 crond 服務開機啓動
- systemctl diable crond 能夠關閉該服務的開機啓動

- 如圖,systemctl status crond.service
- 能夠查看 crond 服務的狀態
- 能夠看到,如今是 active 狀態
- systemctl stop crond 能夠中止crond 服務
- systemctl start crond 能夠啓動crond 服務
- systemctl restart crond 能夠重啓crond 服務

- 如圖,systemctl is-enabled crond 檢測crond服務是否開機啓動
- 能夠看到,下面顯示 enabled 表示 是開機啓動
- 而後 disable crond 服務
- 再檢測一遍,下面顯示 disabled 表示 不是開機啓動

- 如圖,使用命令 systemctl enable crond 的時候
- 下面有一些輸出信息,包含了配置文件的地址
- cat /etc/systemd/system/multi-user.target.wants/crond.service
- 能夠看到 crond 服務的配置文件的內容
- 使用 ls -l /etc/systemd/system/multi-user.target.wants/crond.service
- 能夠看到,這個文件是 /usr/lib/systemd/system/crond.service 的軟連接

- 如圖,systemctl disable crond 把 crond 服務設置爲 disable
- 再使用 ls -l /etc/systemd/system/multi-user.target.wants/crond.service
- 查看 /etc/systemd/system/multi-user.target.wants/crond.service 的信息
- 發現 /etc/systemd/system/multi-user.target.wants/crond.service 軟連接不見了
- 系統判斷一個服務是否開機啓動,就是根據這個軟連接來的
- 若是把一個服務設置爲 enable 開機啓動
- /etc/systemd/system/multi-user.target.wants/ 這個目錄下面就會建立軟連接
- 若是把服務設置爲 disable
- /etc/systemd/system/multi-user.target.wants/ 目錄下面的軟連接就會被刪除
- 系統能夠根據這個軟連接是否存在判斷服務的狀態
unit介紹

- ls /usr/lib/systemd/system 能夠看到系統裏面全部的 unit
- 如圖,unit 分爲不一樣的類型

- 上圖是一些關於 unit 的命令
- systemctl list-units 列出正在運行的unit
- 如圖加入 --all 參數
- 會把全部的 unit 都列出來,包括失敗或者inactive
- 參數 --state=inactive 能夠指定狀態
- 這裏指定了狀態爲 inactive 的unit纔會被列出來
- 由於默認就是列出 active 的 unit
- 因此 active 不須要用 --state來指定
- 除了 active 之外的別的狀態會須要用到 --state 來指定
- systemctl list-units --all --state=inactive
- 命令表示先列出全部unit,再篩選出state爲 inactive 的 unit
- systemctl list-units --type=service
- 參數 --type=service 能夠指定 unit 的類型
- 這裏 指定了 service 類型
- 由於 systemctl list-units 會列出全部狀態爲 active 的unit
- 加上 --type=service 就會再把 unit類型爲service 的 unit 篩選出來
- systemctl is-active crond.service
- 這條命令能夠檢測 crond 服務是否爲 active

- 如圖,active 表示服務檢測結果爲 active
- systemctl is-enabled crond.service
- 能夠檢測 crond 服務是否開機啓動
- 返回 enabled 表示 是開機啓動
target介紹

- systemctl list-unit-files --type=target 能夠查看系統全部的target文件
- target 是由多個 unit 組成的
- systemctl list-dependencies multi-user.target
- 能夠查看 multi-user.target 下面有哪些 unit

- 能夠看到,multi-user.target 下面有不少 service 文件
- 也有 path 文件,還有一些別的 unit 類型文件在裏面
- 這些 unit 組成了 multi-user-target

- 如圖,target 文件裏面也能夠包含 target 文件

- 如圖 systemctl get-default 返回 multi-user.target
- 這條命令能夠返回 系統默認的target名稱
- 這裏系統默認的 target 就是 multi-user.target
- 經過更改默認的 target 就至關於在centOS7裏面修改運行級別
- 好比 multi-user.target 就表示多用戶的運行級別

- systemctl set-default multi-user.target 能夠設置默認 target
- 下面是系統輸出的信息
- /etc/systemdd/system/default.target 是從新設置默認target後
- 系統從新建立的 默認target文件

- 如圖,使用 ls -l /etc/systemdd/system/default.target 查看詳細信息
- 發現 /etc/systemdd/system/default.target 是一個軟連接文件
- 連接對象是 /usr/lib/systemd/system/multi-user.target
- 若是設其它 target 做爲默認的 target
- 系統就會從新建立一個新的軟連接,連接對象也會改變

- 一個target裏面可能包含不少service文件
- 怎麼查看某個service屬於哪一個target文件呢?
- 如圖,cat /usr/lib/systemd/system/sshd.service 查看 sshd.service內容
- 找到 [Install] 信息
- WantedBy=multi-user.target 表示這個service屬於multi-user.target
歡迎關注本站公眾號,獲取更多信息