运维笔记 | 📅 2020-09-11 | linux
在 Linux 系统中,计划任务一般是由 cron
承担。cron
是一个 Linux 下的定时执行工具,可以在无需人工干预的情况下运行作业。
我们主要通过三个部分来管理计划任务,分别是:crond
服务、配置文件和 crontab
命令
服务:其服务以及进程名为:“crond”。此服务即为 cron
的核心服务。它将读取全局配置文件以及用户配置文件,根据配置文件中的命令和执行时间来按时调度工作任务。
配置文件: 全局配置文件一般在 /etc/crontab
,这是个文本文件。用户配置文件一般在 /var/spool/cron/
目录下,配置文件名与用户名相同。
命令:crontab
,此命令可以对计划任务进行基本的操作。
那么,我们应如何去管理以及配置计划任务呢?
crond
服务,一般是随系统启动的,如果没有启动,则可以手动启动:
管理 crond
服务,可以使用 systemctl
或者 service
。
假设要启动 crond
服务,下述两个命令均可:
systemctl start crond
service crond start
其他操作同理,不赘述。
一般情况下,全局配置文件如下:
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
PATH
表示执行命令时所使用的 PATH
环境变量
MAILTO
表示执行命令的用户,全局配置文件一般就是root
后面的内容就是定时任务的配置了,注释也解释地很清楚。
前五个参数是按空格分割的时间频率,分别是:分 时 日 月 星期
,表示 “某月某日(或者星期几)某时某分” 执行。可以填写为 *
表示所有的。
第六个参数是用户名(user-name
),只有全局配置文件需要用户名,用户配置没有此参数。
最后就是要执行的命令
举例:
1 0 * * * root curl baidu.com
意思是每年每月每天 0点1分,用root用户执行 curl baidu.com
。
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
常用的是:
crontab -l
查看当前用户的计划任务列表。crontab -r
删除当前用户的计划任务列表。crontab -e
编辑当前用户的计划任务。此命令会打开默认的文本编辑器进行编辑。crontab <file>
使用指定文件配置当前用户的计划任务。配置文件里只按要求写计划任务即可,格式要求与全局配置文件中相同,但不需要填写用户名。此命令会覆盖已有的计划任务。假设有文件 cron.txt
内容如下:
1 0 * * * curl baidu.com
当执行 crontab cron.txt
的时候,就会将 “每年每月每天 0点1分,执行 curl baidu.com
” 这个计划任务添加到当前用户的计划任务中。可以通过 crontab -l
看到这条任务:
# crontab -l
1 0 * * * curl baidu.com
上述命令均可携带 -u
参数,修改指定用户的计划任务。
可以通过配置文件禁止某些用户执行计划任务。通过将用户名写入 ` /etc/cron.deny` 文件即可禁止用户执行计划任务。
虽然可以通过直接修改配置文件来增删计划任务,但是还是建议通过 crontab
命令来控制计划任务。
比如:crontab <file>
会对你输入的文件进行校验,如果你写的文件不符合规则,则不会运行。这样会减少人类手抖导致的问题。