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
相關文章
相關標籤/搜索