![]() |
在 VPS 上设置 Cron 定时执行程序 - 可打印的版本 +- Netflix优惠码论坛 (https://www.sinovoter.com) +-- 版块: 合租专栏 (https://www.sinovoter.com/forum-18.html) +--- 版块: VPS 主机 服务器优惠 (https://www.sinovoter.com/forum-20.html) +--- 主题: 在 VPS 上设置 Cron 定时执行程序 (/thread-8135.html) |
在 VPS 上设置 Cron 定时执行程序 - netflix - 09-11-2023 在本教程中,我们将了解如何在您的 VPS 上设置重复性任务。您可能希望自动化系统维护或管理,以便您
我们将要介绍的内容
什么是 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 可以在/var/log/cron中找到 cron 运行的日志文件。 Ubuntu 上系统范围的 crontab 文件的内容 使用此命令可以快速查看 crontab 文件的内容: 代码: cat /etc/crontab 以#开头的行是注释。 我们来分析一下 crontab 文件的内容。 crontab 变量 行如 代码: SHELL=/bin/sh SHELL – 可以选择运行 cron 的 shell。默认为 /bin/sh。 PATH 命令,表示系统在执行 cron 命令时应查找的位置(见下文)。如果PATH为空,则必须在命令本身中明确说明命令的整个路径。 HOME 通常,cron 会从用户的主目录执行命令。您可以更改 HOME 变量以指向另一个目录。 MAILTO 对于每个事件,cron 都会向 crontab 的所有者发送电子邮件通知。指定您希望将通知发送到的所有电子邮件地址的逗号分隔列表。输入MAILTO =""以完全不发送邮件。 下面是一个包含所有这些变量的 cron 作业示例: 代码: HOME=/opt Cron 命令解释 cron 命令中的列具有以下含义:
列中的运算符值
– 连字符指定值的范围。如果您在“月份”字段中有 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 进入后,我们会看到 crontab 文件内容: 在 Debian 中编辑 crontab 文件 命令是一样的: 代码: crontab -e 您最终将获得与 Ubuntu 相同的内容,因此我们不会重复该图像。 在 Centos 中编辑 crontab 文件 使用 nano 直接编辑 crontab 文件: 代码: sudo nano /etc/crontab 每次更改 crontab 时,都需要重新启动cron 实用程序。以下是相关命令。 在 Ubuntu / Debian 上启动、停止和重新启动 cron 代码: sudo service cron status 代码: service crond status 下面是 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 代码: 0 18 1 * * /path/to/script/backup-script.sh 代码: @hourly path/to/script/script.sh 保存 cron 作业的输出 一般来说,我们作为 cron 作业执行的脚本会产生一些输出。我们可以保存它的日志文件,像这样: 代码: 0 3,11,16 * * tue,sat path/to/script/script.sh > /path/to/logs/backup.log 2>&1 如果我们不想记录任何输出,命令可以如下所示: 代码: 0 3,11,16 * * tue,sat path/to/script/script.sh > /dev/null 2>&1 我们简单的用nano打开crontab文件,最后输入上面的一个或多个命令。这是在 Centos 的全新服务器安装中找到的 crontab 文件: 代码: sudo nano /etc/cron.d/0hourly 保存并关闭文件,在这种情况下重新启动 crond。当然,在现实生活中,您会使用自己的脚本地址而不是path/to/script/script.sh。 你下一步能做什么 仔细查看您使用 VPS 的方式,然后四处冲浪。您会发现许多您想自动化的重复性任务,因此开始尽可能多地使用cron和crontab文件! 最后提示 crontab 配置文件最后必须增加一个回车号,否则文件可能无法生效。 |