1. 程式人生 > >2018.1.29 8周1次課

2018.1.29 8周1次課

輸出 centos 7 一個 end img 版本 部分 查看服務是否啟動 種類

八周一次課(1月29日)

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小時

  1. 要保證服務是啟動狀態:#systemctl start crond

查看服務是否啟動:

#ps aux|grep cron

技術分享圖片

#systemctl status crond

技術分享圖片

  1. 停止服務:#systemctl stop crond

技術分享圖片

  1. 計劃任務裏的命令盡量寫絕對路徑,同時要寫入到日誌,正確執行追到正確執行日誌裏,錯誤日誌追到到錯誤執行日誌裏

技術分享圖片

  1. 命令crontab -e實際上是打開了/var/spool/cron/username文件,在/var/spool/cron/裏有對應的用戶的cron。以用戶名字命名的(如果用戶是root,則打開的 /var/spool/cron/root)。

打開這個文件使用了vim編輯器,所以保存時在命令行模式下輸人:wq即可。但是請千萬不要直接去編輯那個文件,否則會出錯,所以一定要使用命令crontab -e來編輯

  1. 查看已經設定的任務計劃:crontab -l

  2. 刪除任務計劃: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次課