crond是Linux或者unix系統的作業調度程序。運用它,在設定的時間段周期性執行某個命令或腳本。下文的例子均在centos 7.3上測試。
一、crond組件
如果centos7.3最小化安裝,不一定存在crond服務,需要手動安裝,安裝之后手動啟動并設置以后自行開機啟動。
主要有cronie、cronie-anacron、crontabs三個程序包。
cronie: 主程序包,提供crond守護進程及相關輔助工具
cronie-anacron:cronie的補充程序,用于監控cronie任務執行狀況,如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨后啟動一次此任務
crontabs:包含CentOS提供系統維護任務
二、安裝crond服務,簡單設置
1、查看是不是安裝cron服務:
[root@local ~]# rpm -qa cronie
2、不顯示自動安裝crond服務包,如果沒有此服務包,則顯示Error: Nothing to do
[root@local ~]# yum install cronie -y >/dev/null
[root@local ~]# rpm -qa cronie
cronie-1.4.11-14.el7_2.1.x86_64
3、查看是不是啟用crond啟用
[root@local ~]# systemctl status crond
crond.service – Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
Active: inactive (dead)
4、啟動crond服務
[root@local ~]# systemctl start crond.service
5、檢查crond狀態
[root@local ~]# systemctl status crond
crond.service – Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
Active: active (running) since Sun 2017-03-26 17:50:16 CST; 3s ago
Main PID: 12895 (crond)
CGroup: /system.slice/crond.service
└─12895 /usr/sbin/crond -n
6、檢查服務是不是開機自動動激活
[root@localhost ~]# systemctl is-enabled crond.service
enabled
如果不是則使用以下命令設置當前系統運行級別開機自動激活。
[root@localhost ~]# systemctl enable crond.service
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.
三、crond用戶作業
講解一些在運維工作中基本的使用,如何通過命令方式添加周期性任務。
1、查看當前用戶存在的周期性任務
[root@localhost ~]# crontab -l
no crontab for root
當前用戶root沒有周期性任務
2、單個添加當前用戶的周期性任務
[root@localhost ~]# crontab
輸入命令crontab回車后,等待用戶輸入周期性任務,輸入格式為:
# 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 /usr/bin/date >> /mnt/abc.txt
輸入后回車等待輸入下一個計劃任務,如果結束按Ctrl+D結束
每分鐘把時間當前時間追加輸出至/mnt/abc.txt文件中,abc.txt文件事先存在。
[root@localhost mnt]# cat abc.txt
Sun Mar 26 12:16:01 EDT 2017
Sun Mar 26 12:17:01 EDT 2017
Sun Mar 26 12:18:01 EDT 2017
Sun Mar 26 12:19:01 EDT 2017
Sun Mar 26 12:20:01 EDT 2017
3、修改當前用戶的周期性任務
[root@localhost ~]# crontab -e
回車之后會以vi方式打開當前用戶的所有周期性任務,此時可以添加或刪除、更改當前用戶的所有周期性任務。
*/2 * * * * root /usr/bin/date >> /mnt/abc.txt
修改為每兩分鐘顯示當前時間追加至/mnt/abc.txt中。
[root@localhost mnt]# crontab -l
*/2 * * * * root /usr/bin/date >> /mnt/abc.txt
4、刪除當前用戶的周期性任務
[root@localhost mnt]# crontab -r
[root@localhost mnt]# crontab -l
no crontab for root
5、交互式模式移除指定任務
[root@localhost mnt]# crontab -i
同-r一同使用
6、補充:時間格式表示
? 時間表示法:
(1) 特定值
給定時間點有效取值范圍內的值
(2) *
給定時間點上有效取值范圍內的所有值
表示“每…”
(3) 離散取值
#,#,#
(4) 連續取值
#-#
(5) 在指定時間范圍上,定義步長
/#: #即為步長
特殊時間字段表示:
? @reboot Run once after reboot.
? @yearly 0 0 1 1 *
? @annually 0 0 1 1 *
? @monthly 0 0 1 * *
? @weekly 0 0 * * 0
? @daily 0 0 * * *
? @hourly 0 * * * *
四、crontab權限管理
cront通過/etc/cront.{allow,deny}兩個文件,進行權限管理,控制用戶是否能執行cront任務,系統默認創建/etc/cront.deny文件,不存在/etc/cront.allow:
/etc/cront.allow 存在,則/etc/cront.deny不生效,只有文件定義的使用者才能使用 crontab 命令 ,沒有在這個文件中的使用者則不能使用,即使沒有寫在cront.deny 當中;
/etc/cront.allow 不存在, /etc/cront.deny 生效,系統 cront.deny文件定義的使用者不能使用 cront ,而沒有在這個 cront.deny 文件中的使用者則可使用 crontab 命令;
如果兩個文件都不存在,只有 root 可以使用 crontab 命令 。
即白名單優先管理權限,默認沒有/etc/cron.allow文件,只要創建,僅列出的允許,其他都拒絕。
以上僅講解crond服務一部分功能,未講解系統的周期性任務如何配置,自定義系統的周期性任務等。
原創文章,作者:chenbin,如若轉載,請注明出處:http://www.www58058.com/71931