Linux计划任务

运维笔记 | 📅 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

crontab命令

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

常用的是:

  1. crontab -l 查看当前用户的计划任务列表。
  2. crontab -r 删除当前用户的计划任务列表。
  3. crontab -e 编辑当前用户的计划任务。此命令会打开默认的文本编辑器进行编辑。
  4. 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> 会对你输入的文件进行校验,如果你写的文件不符合规则,则不会运行。这样会减少人类手抖导致的问题。