2018.1.29 8周1次課
10.23 linux任務計劃cron
10.24 chkconfig工具
10.25 systemd管理服務
10.26 unit介紹
10.27 target介紹
10.23 linux任務計劃cron
其實大部分系統管理工作都是通過定期自動執行某個腳本來完成的, 那麽如何定期執行某個腳本呢? 這就要借助Linux的cron功能了
Linux任務計劃功能的操作都是通過crontab命令來完成的, 其常用的選項有以下幾個。
-u:表示指定某個用戶,不加- u選項則為當前用戶。
-e:表示制定計劃任務。
-l:表示列出計劃任務。
-r:表示刪除計劃任務。
這裏每個字段的數字分別表示什麽呢?從左到右依次為:
分鐘、小時、日期、月份、星期、用戶、要執行的命令行
定義計劃任務:# crontab –e
分範圍0-59,時範圍0-23,日範圍1-31,月範圍1-12,周1-7
可用格式1-5表示一個範圍1到5
可用格式1,2,3表示1或者2或者3
可用格式*/2表示被2整除的數字,比如小時,那就是每隔2小時
要保證服務是啟動狀態:#systemctl start crond
查看服務是否啟動:
#ps aux|grep cron
#systemctl status crond
停止服務:#systemctl stop crond
計劃任務裏的命令盡量寫絕對路徑,同時要寫入到日誌,正確執行追到正確執行日誌裏,錯誤日誌追到到錯誤執行日誌裏
命令crontab -e實際上是打開了/var/spool/cron/username文件,在/var/spool/cron/裏有對應的用戶的cron。以用戶名字命名的(如果用戶是root,則打開的 /var/spool/cron/root)。
打開這個文件使用了vim編輯器,所以保存時在命令行模式下輸人:wq即可。但是請千萬不要直接去編輯那個文件,否則會出錯,所以一定要使用命令crontab -e來編輯
查看已經設定的任務計劃:crontab -l
刪除任務計劃:crontab -r,這個刪除選項最好還是少用,因為它會一下子把全部計劃都刪除掉。如果你想只刪除一條計劃,可以使用-e選項進入crontab進行編輯。
10.24 chkconfig工具
Centos 6上的服務管理工具為chkconfig,Linux系統所有的預設服務都可以通過查看/etc/init.d/目錄得到。
只有屈指可數的幾個文件,這是因為centos 7已經不再延續centos 6版本的服務管理方案了。但是我們依然可以繼續使用chkconfig這個命令。系統的預設服務都可以通過這樣的命令實現:service服務名start l stop l restart。這裏的服務名就是/etc/init.d/目錄下的這些文件了。啟動crond除了可以使用命令service crond start外, 還可以使用命令/etc/init.d/crond start。
命令chkconfig --list列出所有的服務及其每個級別的開啟狀態
在這裏也會看到一個提示,它提示我們該命令輸出的內容並沒有包含centos7的原生systemd服務,而這裏僅僅列出來sysv服務。這也是/etc/init.d/目錄下面只有一兩個啟動腳本的根本原因。 也就是說, 早期centos版本 (7之前) 采用的服務管理都是sysv, 而7換成了systemd
這裏的級別 (數字0-6)為系統啟動級別 (centos 7之前版本的用法,而centos 7已經不再嚴格區分級別的概念了), 運行級別0、1和6被系統保留。其中0作為shutdown動作,1作為重啟至單用戶模式,6為重啟。在一般的Linux系統實現中,都使用了2、3、4、5幾個級別。在centos系統中,2表示無NFS支持的多用戶模式,3表示完全多用戶模式(也是最常用的級別),4保留給用戶自定義,5表示圖形登錄方式。現在我們只是看到了各服務在每個級別下的開啟狀態
定義運行級別:# vi /etc/inittab
這裏用--level指定級別,後面是服務名,然後是off或者on。選項--level後面還可以指定多個級別
chkconfig還有一個功能,就是可以把某個服務加入到系統服務或者刪除,即可以使用"chkconfig --add服務名“或者"chkconfig --del服務名“這樣的形式,並且可以在chkconfig --list的結果中查找到
增加某個服務時,首先要把這個服務加入到/etc/init.d/目錄下。只有在這個目錄下才能加到服務列表中。
10.25 systemd管理服務
centos 7不使用sysv而改為systemd了,這是因為systemd支持多個服務並啟動,而sysv只能一個一個地啟動,這樣最終導致的結果是systemd方式啟動會快很多。接下來的知識點也會讓你覺得systemd有點復雜。我們不妨對比著chkconfig工具來學習一下systemd。
列出 systemd文件:systemctl list-unit-files
列出systemd服務:systemctl list-units --all --type=service
不加--all,不顯示inactive的服務
一些常用命令:
systemctl enable crond.service //讓服務開機啟動(service可以省略)
建立了一個軟鏈接/etc/systemd/system/multi-user.target.wants/crond.service -> /usr/lib/systemd/system/crond.service
systemctl disable crond //不讓開機啟動
移走軟鏈接/etc/systemd/system/multi-user.target.wants/crond.service
systemctl status crond //查看狀態
systemctl stop crond //停止服務
systemctl start crond //啟動服務
systemctl restart crond //重啟服務
systemctl is-enabled crond //檢查服務是否開機啟動
10.26 unit介紹
我們先來說一個很重要的概念一一unit
ls /usr/lib/systemd/system //系統所有unit
分為以下類型:
service 系統服務
target 多個unit組成的組
device 硬件設備
mount 文件系統掛載點
automount 自動掛載點
path 文件或路徑
scope 不是由systemd啟動的外部進程
slice 進程組
snapshot systemd快照
socket 進程間通信套接字
swap swap文件
timer 定時器
以上每種類型的文件都為一個unit,這些unit組成了系統的各個資源(各個服務,各個設備等)。
unit相關命令:
systemctl list-units //列出正在運行(active)的unit
systemctl list-units --all //列出所有unit(包括失敗的或者inactive的)
systemctl list-units --all --state=inactive //列出所有inactive的unit
systemctl list-units --all --type=service//列出所有狀態的service
systemctl list-units --type=service//列出狀態為active的service
systemctl is-active crond.service //查看某個服務是否為active
10.27 target介紹
target類似centos6裏面的啟動級別,但target支持多個target同時啟動。target其實是多個unit的組合。系統啟動說白了就是啟動多個unit。為了管理方便,就是使用target來管理這些unit
查看系統所有target:systemctl list-unit-files --type=target
systemctl list-dependencies multi-user.target //查看指定target下面有哪些unit
systemctl get-default //查看系統默認的target
systemctl set-default multi-user.target //設置默認的target
/etc/systemd/system/default.target就是一個軟鏈接
一個service屬於一種類型的unit
多個unit組成了一個target
一個target裏面包含了多個service,你可以cat /usr/lib/systemd/system/服務名,查看[install]部分的內容,它定義了該service屬於哪一個target。
2018.1.29 8周1次課