管理工作有时需要在特定时间执行某些指令,例如系统备份、资料库更新等工作会占用系统资源,如 CPU 与磁碟机等,因此这类工作应该避免在白天执行,最好排定在晚间或凌晨执行。
CentOS 安装完成后,开机会自动启动 crond 服务,crond 是 Linux 的排程服务,负责每分钟检视是否有指定工作需要执行。crond 会读取排程设定档 /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
☛ 环境设定
SHELL 设定当排程工作执行时所使用的 shell 程式,预设是 bash。PATH 则是排程工作执行时的搜寻路径,若执行档不在上述路径中,会产生找不到档案的错误。MAILTO 则是会将执行排程工作的输出信息以电子邮件寄送给本机的使用者。
☛ 排程工作
排程工作时间的订定方法有‘分钟’、‘小时’、’日‘、’月‘与’星期‘五个值可以订定,接着是执行帐号角色与执行指令两个值,之间以空白隔开:
栏位 | 说明 |
1 | 第一个栏位代表’分钟‘,值为 0 到 59 。 |
2 | 第二个栏位代表’时‘,值为 0 到 23 。 |
3 | 代表’日‘,由每月的 1 到 31 日。 |
4 | 代表’月‘,由 1 月到 12 月。 |
5 | 代表’星期‘,0 与 7 都代表星期日,星期一到星期六 ( 1 至 6 ) 。 |
6 | 以哪个帐号角色来执行该项排程工作。 |
7 | 排程工作指令。 |
☛ 系统预设订定排程工作档
系统预设已订定四个排程工作,分别是每小时、每天、每周与每月需执行的工作,已分别指定了’排程工作档‘,有需要时可直接将执行指令新增至所属工作档中:
排程工作 | 设定档 | 排程工作档 | ||||
分 | 时 | 日 | 月 | 星期 | ||
每小时的第一分钟 | 01 | * | * | * | * | crond.hourly |
每天 4 点 02 分 | 02 | 04 | * | * | * | crond.daily |
每星期日的 4 点 22 分 | 22 | 04 | * | * | 0 | crond.weekly |
每月 1 号的 4 点 42 分 | 42 | 04 | 1 | * | * | crond.monthly |
☛ 自定系统备份
利用 gedit 在 /usr/sbin 目录下创建 backup.sh 文件:
[root@localhost ~ ]# gedit /usr/sbin/backup.sh
将所欲执行的指令写在文件中,如下:
#备份 /var/www/html 目录下的所有档案 tar zvcf /home/simon/backup/Backup-web-$(date '+%y-%m-%d').tar.gz /var/www/html #备份 /var/lib/mysql 目录下的所有档案 tar zvcf /home/simon/backup/Backup-mysql-$(date '+%y-%m-%d').tar.gz /var/lib/mysql #备份 /var/mail 目录下的所有档案 tar zvcf /home/simon/backup/Backup-email-$(date '+%y-%m-%d').tar.gz /var/mail
存档后,变更 backup.sh 的权限设定,如下:
[root@localhost ~ ]# chmod 755 /usr/sbin/backup.sh
最后,使用 gedit 修改 /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 #每周日中午 12:00 以 root 角色开始执行备份工作 0 12 * * 7 root /usr/sbin/backup.sh
存档后,重新启动 crond 服务,便完成了排程设定,如下:
[root@localhost ~ ]# systemctl restart crond.service