主题评价:
  • 0 次(票) - 平均星级: 0
  • 1
  • 2
  • 3
  • 4
  • 5
在 VPS 上设置 Cron 定时执行程序
#1
在本教程中,我们将了解如何在您的 VPS 上设置重复性任务。您可能希望自动化系统维护或管理,以便您
  • 每天下载电子邮件,
  • 从互联网下载每周新歌,
  • 删除不再需要的文件,
  • 每天备份您的数据库或数据,
  • 使用最新的安全补丁更新您的系统,
  • 检查您的磁盘空间使用情况,
  • 发电子邮件
等等。将为您完成所有这些的命令是cron,这些任务称为cron jobs。许多流行的软件包会要求您填写cron详细信息,或者像 Drupal 和 Magento 一样,会自行安装 cron 作业。
我们将要介绍的内容
  • crontab的定义
  • 如何将cron命令添加到 crontab 文件
  • 保存cron作业的输出
  • crontab 命令的结构
  • 在 Centos 和 Ubuntu / Debian 上启动、停止、重启 cron
  • 在 Ubuntu、Debian 和 Centos 中编辑 crontab 文件
  • crontab 限制
  • cron命令的一般格式
  • crontab 变量
  • cron 作业示例
先决条件
  • 您需要能够以root身份通过 SSH 连接到您的 VPS 。
  • 您还应该有一个具有sudo功能的非 root 用户,供您使用。
  • 我们使用 nano 作为我们的文本编辑器。它将预装在 Ubuntu 和 Debian 上。在 Centos 上,使用以下命令安装它:

    yum install nano
按两次y完成安装。
什么是 crontab
crontab是cron table的缩写,是一个配置文件,它定义了在给定计划中定期运行的 shell 命令。
Cron 可能是系统范围的,也可能是基于单个用户的,因此将有两种 crontab,一种用于root用户,另一种用于个人用户。系统范围的 crontab 将包含特定用户名的列,而单个用户的 crontab 则不会。
在所有三个系统上,系统范围的 crontab 位于/etc/crontab。您可以直接从此文件编辑 cron 作业,但实际上不应该这样做。只有当每个用户都有自己的一组 crontab 文件时,才会出现真正的自动化。
在 CentOS 上,crontab 文件存储在/var/spool/cron目录中,而在 Debian 和 Ubuntu 上,crontab 文件存储在/var/spool/cron/crontabs目录中。
Centos 中的 Crontab 文件位置
以下是 cron 作业的位置:
代码:
/etc/crontab
/etc/cron.d/
/etc/cron.daily/
/etc/cron.hourly/
/etc/cron.monthly/
/etc/cron.weekly/
/var/spool/cron/
/var/spool/cron/包含每个使用 crontab 的用户的 crontab 文件。
可以在/var/log/cron中找到 cron 运行的日志文件。
Ubuntu 上系统范围的 crontab 文件的内容
使用此命令可以快速查看 crontab 文件的内容:
代码:
cat /etc/crontab
   
以#开头的行是注释。
我们来分析一下 crontab 文件的内容。
crontab 变量
行如
代码:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
包含 cron变量。
SHELL – 可以选择运行 cron 的 shell。默认为 /bin/sh。
PATH 命令,表示系统在执行 cron 命令时应查找的位置(见下文)。如果PATH为空,则必须在命令本身中明确说明命令的整个路径。
HOME 通常,cron 会从用户的主目录执行命令。您可以更改 HOME 变量以指向另一个目录。
MAILTO 对于每个事件,cron 都会向 crontab 的所有者发送电子邮件通知。指定您希望将通知发送到的所有电子邮件地址的逗号分隔列表。输入MAILTO =""以完全不发送邮件。
下面是一个包含所有这些变量的 cron 作业示例:
代码:
HOME=/opt
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/zsh
MAILTO=email@example.com

*/1 * * * * command
该命令将每分钟执行一次。
Cron 命令解释
cron 命令中的列具有以下含义:
  • m – 一小时内的分钟数,从 0 到 59。此列中的数字 17 表示 crontab 将在每小时的第 17 分钟执行一次操作。
  • h – 白天的小时数,从 0 到 23。这里的数字 6 表示一天中每六个小时执行一次操作。
  • dom – 月份的日期,从 0 到 31。
  • mon – 一年中的月份,从 0 到 11。我们可以使用 jan、feb、mar、apr 等来代替数字。
  • dow – 星期几,从 0 到 6,其中 0 是星期日,6 是星期六。在某些系统上,7 也可以表示星期日。
也可以使用
列中的运算符值
  • 星号表示任何值或总是。分钟字段中的星号符号将执行每分钟。
, 逗号指定重复值的列表。例如,如果您在“小时”字段中有 1、13、15,则任务将在凌晨 1 点、下午 1 点和下午 3 点运行。
– 连字符指定值的范围。如果您在“月份”字段中有 1-5,则该任务将从 1 月到 5 月的每个月运行。
/ 斜线指定将在它们之间的特定间隔内重复的值。例如,如果您在 Minutes 字段中有 */4,则该操作将每四分钟执行一次。相同的效果是指定值为 0、4、8、12、16、20。您还可以在斜线之前放置一系列值。例如,1-30/10 与 1,11,21 相同。
Crontab 限制
假设您是系统管理员,您的一位用户开始以每小时 20,000 条消息的速度发送电子邮件营销活动。这可能会导致您的 VPS 的其他用户体验不佳,或者您可能希望该用户开始为方便而支付更多费用。或者,您可以在每个用户的基础上限制他的 crontab。这就是文件/etc/cron.deny和/etc/cron.allow发挥作用的地方。它们包含一个用户名列表,每行一个用户名。
/etc/cron.deny文件默认存在,一开始它是空的。这意味着系统的所有用户都可以使用 cron 作业。名称在该文件中列出的用户根本无法使用 cron。
对应文件是/etc/cron.allow - 只有其中有名字的用户才能使用 cron。
如果两个文件都不存在,并且取决于其他系统参数,要么只有超级用户能够使用 cron 作业,要么所有用户都能够使用 cron 作业。
在 Ubuntu 上使用 crontab 命令
这是一个方便的命令:
代码:
crontab -e
它要求决定一个编辑器,我们选择 nano。
   
进入后,我们会看到 crontab 文件内容:
   
在 Debian 中编辑 crontab 文件
命令是一样的:
代码:
crontab -e
在 Debian 提供的八种不同编辑器中选择 nano:
   
您最终将获得与 Ubuntu 相同的内容,因此我们不会重复该图像。
在 Centos 中编辑 crontab 文件
使用 nano 直接编辑 crontab 文件:
代码:
sudo nano /etc/crontab
并且crontab文件的内容不同:
   
每次更改 crontab 时,都需要重新启动cron 实用程序。以下是相关命令。
在 Ubuntu / Debian 上启动、停止和重新启动 cron
代码:
sudo service cron status
sudo service cron start
sudo service cron stop
sudo service cron restart
在 Centos 上启动、停止和重新启动 cron
代码:
service crond status
service crond stop
service crond start
service crond restart
crontab 命令的结构
下面是 crontab 命令的参数:
crontab -e 编辑 crontab 文件,如果不存在则创建一个。
crontab -l 显示 crontab 文件内容。
crontab -r 删除当前的 crontab 文件。
crontab -i 在删除前使用提示删除当前 crontab 文件。
crontab -u 编辑其他用户的 crontab 文件。必须以系统管理员权限运行。
cron 命令示例
安排备份脚本在每天早上 5:30 运行:
代码:
30 5 * * * /path/to/script/backup-script.sh
要在每个月的第一天晚上 8 点安排备份:
代码:
0 18 1 * * /path/to/script/backup-script.sh
可以使用多个宏在小时、日、周和月的开头开始事件。
代码:
@hourly path/to/script/script.sh
@daily path/to/script/script.sh
@weekly path/to/script/script.sh
@monthly path/to/script/script.sh
@reboot path/to/script/script.sh
最后一行@reboot将在服务器重启后执行。
保存 cron 作业的输出
一般来说,我们作为 cron 作业执行的脚本会产生一些输出。我们可以保存它的日志文件,像这样:
代码:
0 3,11,16 * * tue,sat path/to/script/script.sh > /path/to/logs/backup.log 2>&1
该命令将在周二和周六的凌晨 3 点、上午 11 点和下午 16 点执行,并将输出保存到位于地址/path/to/logs的名为backup.log的文件中。
如果我们不想记录任何输出,命令可以如下所示:
代码:
0 3,11,16 * * tue,sat path/to/script/script.sh > /dev/null 2>&1
如何将 cron 命令添加到 crontab 文件
我们简单的用nano打开crontab文件,最后输入上面的一个或多个命令。这是在 Centos 的全新服务器安装中找到的 crontab 文件:
代码:
sudo nano /etc/cron.d/0hourly
现在输入上面显示的行,你会得到:
   
保存并关闭文件,在这种情况下重新启动 crond。当然,在现实生活中,您会使用自己的脚本地址而不是path/to/script/script.sh。
你下一步能做什么
仔细查看您使用 VPS 的方式,然后四处冲浪。您会发现许多您想自动化的重复性任务,因此开始尽可能多地使用cron和crontab文件!
最后提示
crontab 配置文件最后必须增加一个回车号,否则文件可能无法生效。
默认联系方式为telegram,需要微信号请留言。
回复


论坛跳转:


正在浏览该主题的用户: 2 个游客