XC主机自带 cron 服务可以用来配置定时任务。定时任务的配置方式有三种,可以适用于不同情形
用户配置自己的定时任务时,可以使用
crontab -e
命令打开一个定时任务文件配置,配置仅有该用户的执行权限。配置完成后会在 /var/spool/cron/crontabs/ 目录下生成一个以配置用户的用户名命名的文件。可以使用下面命令查看
sudo ls /var/spool/cron/crontabs/
这个文件即为刚刚配置好的定时任务文件。
下面是文件的默认内容:
# Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command
需要配置具体任务时,可以根据上面的示例在文件下方空白处编辑配置
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ 分 时 日 月 周 命令
意义为每周一 5 时 执行后面的打包压缩操作
如果需要设置每隔多久执行,可以使用下面的格式
* * */2 * * tar -zcf /var/backups/home.tgz /home/
意义为每隔 2 天执行一次后面的压缩操作,使用“*/数字“表示每隔多久
配置完成后,如果需要查看配置内容,可在该用户下执行下面命令查看
crontab -l
/etc/crontab 文件只有使用 root 用户权限才可以配置,配置内容可以指定执行的用户权限。默认配置文件内容如下
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DISPLAY=:0.0 # m h dom mon dow usercommand 17 ** * *root cd / && run-parts --report /etc/cron.hourly 5 9* * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6* * 7roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 61 * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #
添加定时任务时,可以直接修改crontab文件,但是一般做法是在/etc/cron.d/目录下新建配置文件,按照如下格式添加配置,当cron任务运行时,会自动加载/etc/cron.d/目录下的文件配置:
* * * * * 用户 命令 #分 时 日 月 周 执行任务的用户 执行的命令 #例: */5 * * * * root ntpdate timeserver #每5分钟向timeserver服务器对一次时(配置格式与crontab -e大致相同,只是多了用户权限配置)
配置完成之后保存退出即可。
定时任务目录为 /etc 下的 cron.hourly、cron.daily、cron.monthly 和 cron.weekly 四个目录。这四个目录的执行命令默认写在了 /etc/crontab 文件里:
17 ** * *root cd / && run-parts --report /etc/cron.hourly #每小时的第17分钟以root用户身份执行cron.hourly/目录下的脚本文件 5 9* * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) #每填9时05分以root身份执行cron.daily目录下脚本文件 47 6* * 7roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) #每周日6时47分以root身份执行cron.weekly/目录下脚本文件(周日可以用0或者7表示) 52 61 * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #每月1日6时52分以root用户身份执行cron.monthly/目录下的脚本文件
因此,需要简单配置每小时、每天、每周或每月执行一次的定时任务时,可以写好相关的脚本存放在对应定时任务目录即可。
定时任务服务为 cron,系统默认会自启动。增加或者修改定时任务可以直接生效而不需要重启 cron 服务。当服务器维护需要控制 cron 服务时,使用下面的命令即可:
启动服务
sudo systemctl start cron
查看服务状态
systemctl status cron
greatwall@GW-121:~$ sudo systemctl start cron greatwall@GW-121:~$ systemctl status cron ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since 一 2020-02-03 01:42:49 CST; 1 months 1 days ago Docs: man:cron(8) Main PID: 1351 (cron) Tasks: 2 Memory: 207.8M CPU: 8min 36.594s CGroup: /system.slice/cron.service ├─1351 /usr/sbin/cron -f └─8422 pmlogger -r -T 24h10m -m pmlogger_daily -P -l pmlogger.log -c /var/lib/pcp/config/pmlogger/config.default 20200305.00.10 3月 05 15:05:01 GW-121 CRON[27127]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 3月 05 15:05:01 GW-121 CRON[27126]: pam_unix(cron:session): session closed for user root 3月 05 15:15:01 GW-121 CRON[27134]: pam_unix(cron:session): session opened for user root by (uid=0) 3月 05 15:15:01 GW-121 CRON[27135]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 3月 05 15:15:01 GW-121 CRON[27134]: pam_unix(cron:session): session closed for user root 3月 05 15:17:01 GW-121 CRON[27140]: pam_unix(cron:session): session opened for user root by (uid=0) 3月 05 15:17:01 GW-121 CRON[27141]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) 3月 05 15:17:01 GW-121 CRON[27140]: pam_unix(cron:session): session closed for user root 3月 05 15:23:15 GW-121 systemd[1]: Started Regular background program processing daemon. 3月 05 15:23:17 GW-121 systemd[1]: Started Regular background program processing daemon. greatwall@GW-121:~$
停止服务
sudo systemctl stop cron
greatwall@GW-121:~$ sudo systemctl stop cron greatwall@GW-121:~$ systemctl status cron ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: inactive (dead) since 四 2020-03-05 15:24:06 CST; 1s ago Docs: man:cron(8) Main PID: 1351 (code=killed, signal=TERM) Tasks: 1 Memory: 207.8M CPU: 8min 36.594s CGroup: /system.slice/cron.service └─8422 pmlogger -r -T 24h10m -m pmlogger_daily -P -l pmlogger.log -c /var/lib/pcp/config/pmlogger/config.default 20200305.00.10 3月 05 15:15:01 GW-121 CRON[27134]: pam_unix(cron:session): session opened for user root by (uid=0) 3月 05 15:15:01 GW-121 CRON[27135]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 3月 05 15:15:01 GW-121 CRON[27134]: pam_unix(cron:session): session closed for user root 3月 05 15:17:01 GW-121 CRON[27140]: pam_unix(cron:session): session opened for user root by (uid=0) 3月 05 15:17:01 GW-121 CRON[27141]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) 3月 05 15:17:01 GW-121 CRON[27140]: pam_unix(cron:session): session closed for user root 3月 05 15:23:15 GW-121 systemd[1]: Started Regular background program processing daemon. 3月 05 15:23:17 GW-121 systemd[1]: Started Regular background program processing daemon. 3月 05 15:24:06 GW-121 systemd[1]: Stopping Regular background program processing daemon... 3月 05 15:24:06 GW-121 systemd[1]: Stopped Regular background program processing daemon. greatwall@GW-121:~$
设置服务开机自启动
sudo systemctl enable cron
greatwall@GW-121:~$ sudo systemctl enable cron Synchronizing state of cron.service with SysV init with /lib/systemd/systemd-sysv-install... Executing /lib/systemd/systemd-sysv-install enable cron greatwall@GW-121:~$
关闭服务开机自启动
sudo systemctl disable cron
greatwall@GW-121:~$ sudo systemctl disable cron Synchronizing state of cron.service with SysV init with /lib/systemd/systemd-sysv-install... Executing /lib/systemd/systemd-sysv-install disable cron insserv: warning: current start runlevel(s) (empty) of script `cron' overrides LSB defaults (2 3 4 5). insserv: warning: current stop runlevel(s) (2 3 4 5) of script `cron' overrides LSB defaults (empty). greatwall@GW-121:~$
作者:陈思宇