day36:linux下的cron計劃、chkconfig及systemd服務

一、crond任務計劃:用來管理系統和執行系統週期性的任務,相似於windows下的任務計劃,當安裝完操做系統後,系統會默認安裝此服務,而且會自行啓動crond進程,crond沒分鐘會按期檢查是否有要執行的任務,若是有要執行的任務,則自動執行:shell

crontab      options vim

options:windows

-u查看指定用戶的任務計劃,不指定則爲root用戶bash

-l列出計劃任務:可結合-u併發

-r表示刪除計劃任務:可結合-u:dom

-e編輯任務計劃,等同於打開了vim   /var/spool/cron/user/某個用戶的文件:ssh

1:制定計劃任務:socket

crontab的配置文件:     cat   /etc/crontabide

[root@localhost ~]# cat /etc/crontab 
SHELL=/bin/bash             #運行格式
PATH=/sbin:/bin:/usr/sbin:/usr/bin       #PATH路徑
MAILTO=root

# 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
  分 時 日  月 周   root   命令

如上圖示例:crond的命令格式工具

分    時    日    月      周      username        command    

經常使用命令格式以下:

1-5:表示一個範圍(從1點到5點之間執行)裏面:

1,2,3:表示1點或者2點或者3點分別執行:

*/2:表示被2整除,如每兩小時執行一次:

示例1:添加任務計劃:   crontab   -e  

[root@localhost ~]# crontab -e           #編輯此任務計劃:
0 03 * * * /bin/bash  /usr/sbin/slow.backup    #天天晚上凌晨三點執行/usr/sbin/slow.backup: 
01 10 05 06 3 echo " " >root/1.log             #每一年5月5號10點零一分星期三則清空/root/1.log這個文件:
0  */2 * *  *  ntpdate time.windows.com        #天天隔兩個小時執行時間同步腳本:
0 1,12,18 * * * /bin/bash  /usr/local/iptables.sh    #天天的1點、12點、18點執行/usr/local/iptables.sh
0 9-18 * * * /bin/bash /usr/local/iptables.sh      #天天9點到18點執行/usr/local/iptables.sh這個腳本:

示例2:給指定用戶添加任務計劃:crontab   -u   yuanhh   -e 

[root@localhost ~]# crontab -u yuanhh -e 
01 10 05 06 3 echo "ok" >root/cron.log      #給root下的crond.log寫入文件內容:

注意:建議後面的命令要寫絕對路徑(否則會報錯),編輯時直接使用-e,不要直接編輯/var/spool/cron/下的配置文件:

2:查看當前用戶及某個用戶的任務計劃:    crontab   -l  

[root@localhost ~]# crontab -l
0 03 * * * /bin/bash  /usr/sbin/slow/backup
01 10 05 06 3 echo "1" >root/1.log
0  */8 * *  *  ntpdate time.windows.com
0 1,12,18 * * * /bin/bash  /usr/local/iptables.sh
0 9-18 * * * /bin/bash /usr/local/iptables.sh

[root@localhost ~]# crontab -u yuanhh -l     #查看yuanhh的crond計劃:
01 10 05 06 3 echo "ok" >root/cron.log

3:刪除當前用戶及某個用戶的任務計劃:crontab   -r 

[root@localhost ~]# crontab -r       #刪除root的crond計劃:
[root@localhost ~]# crontab -l       #查看root的crond計劃:
no crontab for root
[root@localhost ~]# crontab -u yuanhh -r     #刪除yuanhh用戶的任務計劃:
[root@localhost ~]# crontab -u yuanhh -l     #查看yuanhh用戶的任務計劃:
no crontab for yuanhh

註釋:建議刪除某個任務計劃時不要使用-r命令,能夠先使用crontab  -e進入到任務計劃,而後再刪除某個任務計劃:

4:啓動和關閉crond任務計劃

[root@localhost ~]# systemctl stop crond        #關注crond服務:
[root@localhost ~]# systemctl start crond       #開啓crond服務:
[root@localhost ~]# systemctl status crond      #查看crond的狀態:
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; disabled; vendor preset: enabled)
   Active: active (running) since 一 2018-08-13 07:40:28 CST; 20s ago
 Main PID: 2943 (crond)
   CGroup: /system.slice/crond.service
           └─2943 /usr/sbin/crond -n

8月 13 07:40:28 localhost.localdomain systemd[1]: Started Command Scheduler.
8月 13 07:40:28 localhost.localdomain systemd[1]: Starting Command Scheduler...
8月 13 07:40:28 localhost.localdomain crond[2943]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 24% if used.)
8月 13 07:40:28 localhost.localdomain crond[2943]: (CRON) INFO (running with inotify support)
8月 13 07:40:28 localhost.localdomain crond[2943]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

二、chkconfig:服務管理工具,能夠查看當前系統中有哪些服務,也能夠經過此命令添加和刪除服務是否開機自啓動,查看服務的各個運行級別,

服務的目錄保存/etc/init.d/目錄下,不過從Centos  7開始不在沿用此服務管理工具:

語法:  chkconfig    options  

options

--list:查看使用chkconfig的服務的狀態:

--add:增長指定服務:

--del:刪除指定服務:

--level:指定某服務在系統運行級別狀態開啓或者關閉:

1:查看服務及其運行級別狀態:

[root@localhost ~]# chkconfig --list

注:該輸出結果只顯示 SysV 服務,並不包含
原生 systemd 服務。SysV 配置數據
可能被原生 systemd 配置覆蓋。 

      要列出 systemd 服務,請執行 'systemctl list-unit-files'。
      查看在具體 target 啓用的服務請執行
      'systemctl list-dependencies [target]'。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:開	4:開	5:開	6:關

服務名稱         關機     單用戶  不帶NFS   命令行   保留    圖形化    重啓

如上圖例:查看時發現只有幾個服務了,這是由於Centos並無沿用chkconfig服務管理(SysV),而是使用systemd做爲管理工具,不過能夠向下兼容使用chkconfig如圖知道:須要查看服務請執行systectl    list-unit-files 這個命令:

2:chkconfig --add 增長某個服務:

[root@localhost init.d]# chkconfig --add 123     #添加123這個服務:
[root@localhost init.d]# chkconfig --list 123    #查看其各個級別的運行狀態:
123            	0:關	1:關	2:開	3:開	4:開	5:開	6:關
[root@localhost init.d]# chkconfig --level 2345 123 off     #關閉2345的運行級別狀態:
[root@localhost init.d]# chkconfig --list 123           #查看其服務狀態:

注:該輸出結果只顯示 SysV 服務,並不包含
原生 systemd 服務。SysV 配置數據
可能被原生 systemd 配置覆蓋。 

      要列出 systemd 服務,請執行 'systemctl list-unit-files'。
      查看在具體 target 啓用的服務請執行
      'systemctl list-dependencies [target]'。

123            	0:關	1:關	2:關	3:關	4:關	5:關	6:關
[root@localhost init.d]# chkconfig --del 123            #刪除這個服務:

3:chkconfig啓動腳本類:   

chkconfig       345                10                           90   

chkconfig    運行級別    開機時第10位啓動        關機時第90爲關閉

[root@localhost init.d]# cat network 
#! /bin/bash
#
# network       Bring up/down networking
#
# chkconfig: 2345 10 90          #chkconfig   運行級別     第10位啓動    第90位關閉
# description: Activates/Deactivates all network interfaces configured to \
#              start at boot time.
#
### BEGIN INIT INFO
# Provides: $network

三、systemd服務管理:Centos開始沿用systemd做爲服務管理,不在使用SysV,由於systemd支持多個服務併發啓動,而SysV只能一個一個的啓動,全部systemd的啓動會比較快不少的:

1:啓動類經常使用命令

[root@localhost ~]# systemctl disable crond                        #關閉crond服務開機自啓動:

[root@localhost ~]# systemctl enable crond                        #開啓crond服務開機機自啓動:
[root@localhost ~]# systemctl stop crond                           #關閉crond服務:                        
[root@localhost ~]# systemctl start crond                          #開啓crond服務:
[root@localhost ~]# systemctl restart crond                      #從新啓動crond服務:
[root@localhost ~]# systemctl status crond                       #查看crond的服務狀態:

註釋:伴隨着某服務的開/關會創建/刪除一個指向該服務的軟鏈接「/etc/systemd/system/multi-user.target.wants/crond.service」-->「/usr/lib/systemd/system/crond.service

[root@localhost ~]# systemctl enable crond    #開啓服務時:
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.
[root@localhost ~]# ls /etc/systemd/system/multi-user.target.wants/crond.service
/etc/systemd/system/multi-user.target.wants/crond.service
#發現此文件存在:
[root@localhost ~]# systemctl disable crond    關閉服務時:
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
ls: 沒法訪問/etc/systemd/system/multi-user.target.wants/crond.service: 沒有那個文件或目錄
#發現此文件不存在:

2:服務權限:systemd有系統和用戶之分:存放位置不一樣:

系統:/usr/lib/systemd/system/

用戶:/etc/systemd/system/                      #而用戶建立通常保存在/etc/systemd/system/此目錄下:

[root@localhost ~]# ls /usr/lib/systemd/system/        #系統
chrony-wait.service                            runlevel0.target
console-getty.service                          runlevel1.target
console-shell.service                          runlevel1.target.wants/
container-getty@.service                       runlevel2.target
cpupower.service                               runlevel2.target.wants/
crond.service                                  runlevel3.target
cryptsetup-pre.target                          runlevel3.target.wants/
cryptsetup.target                              runlevel4.target
ctrl-alt-del.target                            runlevel4.target.wants/
dbus-org.freedesktop.hostname1.service         runlevel5.target
dbus-org.freedesktop.import1.service           runlevel5.target.wants/
[root@localhost ~]# ls /etc/systemd/system/            #用戶
basic.target.wants                           default.target        multi-user.target.wants
dbus-org.freedesktop.NetworkManager.service  default.target.wants  system-update.target.wants
dbus-org.freedesktop.nm-dispatcher.service   getty.target.wants

3:unit:當執行ls  /usr/lib/systemd/system/目錄下,在此目錄下,每種類型的文件都爲一個unit,正是這寫unit才組成了系統的各個設備、各個服務、各個資源等:

[root@localhost ~]# ls /usr/lib/systemd/system/
arp-ethers.service                      local-fs.target.wants                          swap.target
auditd.service                          machine.slice                                  sys-fs-fuse-connections.mount
autovt@.service                         machines.target                                sysinit.target
basic.target                            messagebus.service                             sysinit.target.wants
basic.target.wants                      microcode.service                              sys-kernel-config.mount
blk-availability.service                multi-user.target                              sys-kernel-debug.mount
bluetooth.target                        multi-user.target.wants                        syslog.socket
brandbot.path                           NetworkManager-dispatcher.service              syslog.target.wants

後綴名結尾

.service:系統服務:

device:硬件設備:

mount:文件系統掛載點:

automount:自動掛載點:

path:文件或路徑:

target:多個unit組成的組:

unit的經常使用命令

systemctl  list-units       #列出正在運行的unit:

systemctl  list-units       #列出全部unit(失敗和成功的)

systemctl  lint-units  --type=service       #列出狀態爲active的service:

systemctl  list-units  --all   --type=service    #列出全部狀態的service: 

[root@localhost ~]# systemctl list-units     #列出正在運行的unit:
  UNIT                                                  LOAD   ACTIVE SUB       DESCRIPTION
  proc-sys-fs-binfmt_misc.automount                     loaded active waiting   Arbitrary Executable File Formats File System Automou
  sys-devices-pci0000:00-0000:00:07.1-ata2-host2-target2:0:0-2:0:0:0-block-sr0.device loaded active plugged   VMware_Virtual_IDE_CDRO
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda1.device loaded active plugged   VMware_Virtual_S 1
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda2.device loaded active plugged   VMware_Virtual_S 2

[root@localhost ~]# systemctl list-units  all       #列出全部unit(失敗和成功)       
  UNIT                                                  LOAD   ACTIVE SUB       DESCRIPTION
  proc-sys-fs-binfmt_misc.automount                     loaded active waiting   Arbitrary Executable File Formats File System Automou
  sys-devices-pci0000:00-0000:00:07.1-ata2-host2-target2:0:0-2:0:0:0-block-sr0.device loaded active plugged   VMware_Virtual_IDE_CDRO
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda1.device loaded active plugged   VMware_Virtual_S 1
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda2.device loaded active plugged   VMware_Virtual_S 2
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda3.device loaded active plugged   VMware_Virtual_S 3

 [root@localhost ~]# systemctl list-units --type=service    #列出狀態爲active的service:
  UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
  auditd.service                     loaded active running Security Auditing Service
  chronyd.service                    loaded active running NTP client/server
  crond.service                      loaded active running Command Scheduler
  dbus.service                       loaded active running D-Bus System Message Bus
  getty@tty1.service                 loaded active running Getty on tty1
  iptables.service                   loaded active exited  IPv4 firewall with iptables
● kdump.service                      loaded failed failed  Crash recovery kernel arming

[root@localhost ~]# systemctl list-units --all --type=service     #列出全部狀態的service:
  UNIT                                                  LOAD      ACTIVE   SUB     DESCRIPTION
  auditd.service                                        loaded    active   running Security Auditing Service
  brandbot.service                                      loaded    inactive dead    Flexible Branding Service
  chronyd.service                                       loaded    active   running NTP client/server
  cpupower.service                                      loaded    inactive dead    Configure CPU power related settings
  crond.service                                         loaded    active   running Command Scheduler
  dbus.service                                          loaded    active   running D-Bus System Message Bus
● display-manager.service                               not-found inactive dead    display-manager.service

也能夠查看某個unit是不是active:     systemctl     is-active      crond

[root@localhost ~]# systemctl is-active crond
active

四、target:相似於Centos 6的啓動級別,當target支持多個target同時啓動,traget實際上是多個unit的組合,系統啓動就是在啓動多個unit,因此用target來管理這些unit:

查看系統裏全部target

[root@localhost ~]# systemctl list-unit-files --type=service
UNIT FILE                                     STATE   
arp-ethers.service                            disabled
auditd.service                                enabled 
autovt@.service                               enabled 
blk-availability.service                      disabled

列出一個target下包含哪些unit

[root@localhost ~]# systemctl list-dependencies  multi-user.target
multi-user.target
● ├─auditd.service
● ├─brandbot.path
● ├─chronyd.service
● ├─crond.service
● ├─dbus.service
● ├─irqbalance.service

查看系統默認的target:並設置新的target:

[root@localhost ~]# systemctl get-default                #查看默認的target:
multi-user.target
[root@localhost ~]# systemctl set-default multi-user.target     #設置target:
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

註釋最後簡單介紹下unit和target  service的關係

一個service屬於一種類型的unit:

多個unit組成一個target:

因此一個target裏面也包含了許多個service:

註釋:若是想看這個服務屬於哪一個target,看下面配置文件的install部分

[root@localhost ~]# cat /usr/lib/systemd/system/sshd.service    #查看sshd屬於按個target:
[Unit]

[Install]
WantedBy=multi-user.target                #屬於mulit-user.target

擴展:systemd添加自定義系統服務:

鏈接:https://www.jb51.net/article/100457.htm

相關文章
相關標籤/搜索