crond、chkconfig、systemd、unit、target

linux任務計劃cron

crontab命令被用來提交和管理用戶的須要週期性執行的任務,與windows下的計劃任務相似,當安裝完成操做系統後,默認會安裝此服務工具,而且會自動啓動crond進程,crond進程每分鐘會按期檢查是否有要執行的任務,若是有要執行的任務,則自動執行該任務。linux

語法: crontab [options]
Options:
-e:=edit 編輯用戶的計時器設置
-l:=list 列出用戶的計時器設置
-r:=remove 刪除用戶的計時器設置
-u:=user 指定設定計時器的用戶nginx

配置計劃任務

crontab的配置文件: /etc/crontabweb

[root@3 grep]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
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

設定計劃任務

eg:shell

[root@3 grep]# crontab -e
0 3 * * *   /bin/bash /user/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log


0 3 1-10 */2 2,5   /bin/bash /user/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log

解析:windows

  • 第一條命令:
    天天凌晨3點(*位置不指定數字就表明天天、月、周),當前用戶(未指定用戶,默認爲當前用戶)執行該命令(123.sh提早寫好的命令腳本),並將正確日誌和錯誤日誌記錄到/tmp/123.log文件中。centos

  • 第二條命令:
    每一個偶數月(*/2:表示能被2整除)1號到10號的週二和週五的凌晨3點,當前用戶(未指定用戶,默認爲當前用戶)執行該命令(123.sh提早寫好的命令腳本),並將正確日誌和錯誤日誌記錄到/tmp/123.log文件中。bash

啓動crond服務/查看服務狀態

配置完成後須要啓動crond服務:ssh

啓動服務:
[root@3 grep]# systemctl start crond

查看crond服務狀態:
方法1:
[root@3 grep]# systemctl status crond.service 
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 一 2017-07-17 10:05:11 CST; 4h 48min ago
 Main PID: 501 (crond)
……
方法2:
[root@3 grep]# ps aux |grep crond
root       501  0.0  0.1 126224  1624 ?        Ss   10:05   0:00 /usr/sbin/crond -n

中止crond服務:  
[root@3 grep]# systemctl stop crond.service

注意: 在編寫配置文件或者shell腳本時,全部的命令都要使用絕對路徑;每一個計劃任務追加一個日誌。socket

查看現有的計劃任務

[root@3 grep]# crontab -l
no crontab for root

計劃任務存放位置: /var/spool/cron/,全部的計劃任務存放在該目錄下以用戶名命名的文件中,備份時可使用該文件。工具

刪除計劃任務

[root@3 grep]# crontab -r

注: 以上全部操做均可以附加-u選項來指定用戶。

chkconfig工具

chkconfig命令檢查、設置系統的各類服務。這是Red Hat公司遵循GPL規則所開發的程序,它可查詢操做系統在每個執行等級中會執行哪些系統服務,其中包括各種常駐服務。謹記chkconfig不是當即自動禁止或激活一個服務,它只是簡單的改變了符號鏈接(該命令多用於centos6及之前版本)。

語法: chkconfig [options]
Options:
--list:查看在使用chkconfig命令的服務的狀態
--add:增長指定服務
--del:刪除指定服務
--level:指定某系統服務要在系統某運行級別中開啓或關畢。

應用:

  • chkconfig --list 查看當前系統服務狀態
[root@3 grep]# 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:關

服務所在位置:/etc/init.d/

[root@3 grep]# ls /etc/init.d/
functions  netconsole  network  README
  • 更改服務狀態

    • 更改服務全部狀態:
    [root@3 grep]# chkconfig network off/on
    • 功能服務在某一運行級別的狀態:
    [root@3 grep]# chkconfig --level 345 network off/on

    運行級別配置文件:「/etc/inittab」,centos7已再也不使用該文件。

  • 添加/刪除服務
    首先,在添加服務以前必須把該服務的腳本放到「/etc/init.d/」目錄下並添加執行權限。而後執行命令:

[root@3 ~]# ls /etc/init.d/
123  functions  netconsole  network  README

添加/刪除:
[root@3 ~]# chkconfig --add /etc/init.d/123
[root@3 ~]# chkconfig --list

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

[root@3 init.d]# chkconfig --del /etc/init.d/123

注: 關於該服務腳本
mark

systemd管理服務

>systemctl命令是系統服務管理器指令,它實際上將 service 和 chkconfig 這兩個命令組合到一塊兒。

systemctl命令

mark

[root@3 ~]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
[root@3 ~]# systemctl enable crond
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.

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

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

節選於:http://www.jb51.net/article/100457.htm

設置自定義開機啓動的方法:

一、服務權限

systemd有系統和用戶區分:系統(/user/lib/systemd/system/),用戶(/etc/lib/systemd/user/)。
通常系統管理員手工建立的單元文件建議存放在/etc/systemd/system/目錄下面。

二、建立服務文件

[Unit] 
Description=nginx - high performance web server 
Documentation=http://nginx.org/en/docs/ 
After=network.target remote-fs.target nss-lookup.target    

[Service] 
Type=forking 
PIDFile=/run/nginx.pid 
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf 
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf 
ExecReload=/bin/kill -s HUP $MAINPID 
ExecStop=/bin/kill -s QUIT $MAINPID 
PrivateTmp=true    

[Install] 
WantedBy=multi-user.target

[Unit]

Description : 服務的簡單描述

Documentation : 服務文檔

Before、After:定義啓動順序。Before=xxx.service,表明本服務在xxx.service啓動以前啓動。After=xxx.service,表明本服務在xxx.service以後啓動。

Requires:這個單元啓動了,它須要的單元也會被啓動;它須要的單元被中止了,這個單元也中止了。

Wants:推薦使用。這個單元啓動了,它須要的單元也會被啓動;它須要的單元被中止了,對本單元沒有影響。

[Service]

Type=simple(默認值):systemd認爲該服務將當即啓動。服務進程不會fork。若是該服務要啓動其餘服務,不要使用此類型啓動,除非該服務是socket激活型。

Type=forking:systemd認爲當該服務進程fork,且父進程退出後服務啓動成功。對於常規的守護進程(daemon),除非你肯定此啓動方式沒法知足需求,使用此類型啓動便可。使用此啓動類型應同時指定 PIDFile=,以便systemd可以跟蹤服務的主進程。

Type=oneshot:這一選項適用於只執行一項任務、隨後當即退出的服務。可能須要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出以後仍然認爲服務處於激活狀態。

Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。

Type=dbus:若以此方式啓動,當指定的 BusName 出如今DBus系統總線上時,systemd認爲服務就緒。

Type=idle: systemd會等待全部任務(Jobs)處理完成後,纔開始執行idle類型的單元。除此以外,其餘行爲和Type=simple 相似。

PIDFile:pid文件路徑

ExecStart:指定啓動單元的命令或者腳本,ExecStartPre和ExecStartPost節指定在ExecStart以前或者以後用戶自定義執行的腳本。Type=oneshot容許指定多個但願順序執行的用戶自定義命令。

ExecReload:指定單元中止時執行的命令或者腳本。

ExecStop:指定單元中止時執行的命令或者腳本。

PrivateTmp:True表示給服務分配獨立的臨時空間

Restart:這個選項若是被容許,服務重啓的時候進程會退出,會經過systemctl命令執行清除並重啓的操做。

RemainAfterExit:若是設置這個選擇爲真,服務會被認爲是在激活狀態,即便因此的進程已經退出,默認的值爲假,這個選項只有在Type=oneshot時須要被配置。

[Install]

Alias:爲單元提供一個空間分離的附加名字。

RequiredBy:單元被容許運行須要的一系列依賴單元,RequiredBy列表從Require得到依賴信息。

WantBy:單元被容許運行須要的弱依賴性單元,Wantby從Want列表得到依賴信息。

Also:指出和單元一塊兒安裝或者被協助的單元。

DefaultInstance:實例單元的限制,這個選項指定若是單元被容許運行默認的實例。

三、重載服務

systemctl enable nginx.service

就會在/etc/systemd/system/multi-user.target.wants/目錄下新建一個/usr/lib/systemd/system/nginx.service 文件的連接。

四、操做服務

#啓動服務 
$ sudo systemctl start nginx.service    

#查看日誌 
$ sudo journalctl -f -u nginx.service 
— Logs begin at 四 2015-06-25 17:32:20 CST. — 
6月 25 10:28:24 Leco.lan systemd[1]: Starting nginx – high performance web server… 
6月 25 10:28:24 Leco.lan nginx[7976]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
6月 25 10:28:24 Leco.lan nginx[7976]: nginx: configuration file /etc/nginx/nginx.conf test is successful 
6月 25 10:28:24 Leco.lan systemd[1]: Started nginx – high performance web server.    
#重啓 
$ sudo systemctl restart nginx.service    
#重載 
$ sudo systemctl reload nginx.service    
#中止 
$ sudo systemctl stop nginx.service

unit介紹

unit所在目錄: /usr/lib/systemd/system/

unit文件類型

mark

unit相關命令

mark

target介紹

系統爲了方便管理,因此使用target來管理unit。

相關操做:

mark

target、service、unit關係

一個service屬於一種類型的unit,多個unit組成一個target,一個target包含多個service。

查看一個service屬於哪一個target:

[root@3 system]# cat /usr/lib/systemd/system/sshd.service  
看Install部分!
………
[Install]
WantedBy=multi-user.target
相關文章
相關標籤/搜索