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服務: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命令檢查、設置系統的各類服務。這是Red Hat公司遵循GPL規則所開發的程序,它可查詢操做系統在每個執行等級中會執行哪些系統服務,其中包括各種常駐服務。謹記chkconfig不是當即自動禁止或激活一個服務,它只是簡單的改變了符號鏈接(該命令多用於centos6及之前版本)。
語法: chkconfig [options]
Options:
--list:查看在使用chkconfig命令的服務的狀態
--add:增長指定服務
--del:刪除指定服務
--level:指定某系統服務要在系統某運行級別中開啓或關畢。
[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
注: 關於該服務腳本
>systemctl命令是系統服務管理器指令,它實際上將 service 和 chkconfig 這兩個命令組合到一塊兒。
[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」
節選於: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所在目錄: /usr/lib/systemd/system/
系統爲了方便管理,因此使用target來管理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