利用crontab Linux命令自动化各种平凡和重复的任务,简化您的生活。这个优秀且易于使用的工具,结合一些脚本,不仅可以自动执行各种任务,还可以帮助避免简单的人为错误或遗忘。
在这里,您将了解什么是crontab,如何添加自动化作业,以及一些实际示例。
Crontab是一个后台进程,几乎在所有Linux机器上都在后台运行,用于按设置的时间间隔调度和执行自动任务。软件开发人员也经常使用它在后台运行耗时的任务。
这可以是任何事情,包括但不限于发送批量电子邮件,检查您的Twitter提要,执行备份,或只是执行提醒。
机器上的每个Linux用户都有自己的crontab文件,其中包含他们的活动crontab作业。下面是一些用于查看和修改crontab文件的基本终端命令:
以上命令将用于当前用户的crontab文件。如果需要修改其他用户的crontab文件,只需使用-u选项。例如,可以使用以下命令编辑jdoe用户的crontab文件:
sudo crontab -ujdoe -e每个crontab作业由一行组成,格式如下:
MINUTE HOUR DAY MONTH WEEKDAY COMMAND下表说明了crontab作业的不同元素:
Element | Ranage | Description |
---|---|---|
分钟 | 0 - 59 | 执行crontab作业的分钟数。 |
小时 | 0 - 23 | 执行crontab作业的时间。 |
天 | 1 - 31 | 在上执行crontab作业的月份。 |
月 | 1 - 12 | 执行crontab作业的月份。 |
工作日 | 0 - 6 | 在上执行crontab作业的星期几。 |
命令 | 可以在终端上执行的任何Linux命令。 |
您可以在任何字段中使用星号(*)来表示通配符,这意味着crontab作业将在任何时间段执行。例如,下面的crontab作业将在每天凌晨3:20执行:
20 3 * * * /root/backup.sh每个时间段还可以包括多个元素。您可以通过用逗号分隔来指定精确的值,下面的crontab作业将在每小时20和50分钟后执行一次:
20,50 * * * * /path/to/command.sh但是,如果要在一个时间段内以特定的间隔执行crontab作业,可以使用*/period,并且下面的crontab作业将在每三个小时的15分钟后自动执行:
15 */3 * * * /path/to/command.sh根据具体情况,您可能希望消除crontab作业的所有输出,这样它们就不会出现在系统的邮件文件夹中。您可以通过将>;/dev/null 2>;&;1附加到任何crontab作业来完成此操作。例如:
0 6 15 * * /path/to/backup.sh > /dev/null 2>&1通常,添加或修改crontab作业最常用的方法是crontab-e命令。在终端中运行以下命令:
crontab -e这将打开一个文本编辑器,比如nano,其中包含crontab文件的内容。每个crontab作业驻留在一行中,您可以根据需要添加、修改和删除行。完成后,按Ctrl+W保存并关闭文件,然后按Y和Enter键,这将立即激活文件中的所有crontab作业。
除了手动修改crontab文件之外,您还可以运行一个快速的命令来添加作业。例如,如果要添加每个星期日下午2:00运行的crontab作业:
0 14 * * 0 /path/to/command.sh可以使用以下单个命令将作业添加到crontab文件:
(crontab -l; echo "0 14 * * 0 /path/to/command.sh";) | crontab上面的命令只是列出crontab文件中当前的所有作业,打印新作业,并将所有内容导入crontab以替换其内容。
您可以使用以下命令列出crontab文件中当前处于活动状态的所有作业:
crontab -l您还可以删除所有crontab作业,并使用以下命令清空crontab文件的内容:
crontab -r工作时需要每两小时快速提醒一次,让你知道时间已经过去了吗?抓取你最喜欢的几乎任何格式的音频剪辑(.wav,.mp4,任何东西),如果它保存在(例如)/home/myuser/我的警报.wav自动播放crontab作业:
0 */2 * * * aplay /home/myuser/myalert.wav在每周五下午5点自动播放你最喜欢的歌曲,为你一周的工作做一个美好的送别怎么样?抓取你最喜欢的歌曲剪辑,如果保存在say/home/myuser/friday_歌曲.mp4您将添加crontab作业:
0 17 * * 5 aplay /home/myuser/friday_song.mp4crontab的许多优秀用途之一是能够自动将文件备份到远程服务器。通过这个优秀的rsync教程,您可以大大降低再次丢失重要数据的风险。
也许你想每五分钟自动检查一次各个网站是否在线,如果有网站关闭,你会通过电子邮件得到通知。这里有一个漂亮的小PHP脚本,可以做到这一点。
<?php// E-mail address to notify of sites down$email = '[email protected]';// Define URLs to check$urls = ['https://apexpl.io','https://google.com','https://some-junk-site-that-will-hopefully-never-exist.com'];// Go through URLs$down = [];foreach ($urls as $url) {// Check URL$status = check_url($url);if ($status != 200) {$down[] = $url;}}// Send e-mail if we have down sitesif (count($down) > 0) {mail($email, "Urgent - Sites Down!", "Your bot has detected the following sites are currently down:" . implode("", $down));}// Exitexit(0);/*** Check URL*/function check_url(string $url):int{// Send via cURL$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);$resp***e = curl_exec($ch);// Get status, and close connection$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);// Returnreturn $status;}只需在文件顶部修改电子邮件地址和所需的url进行检查,并将其保存在/home/myuser/check等位置_网站.php. 要使此脚本每五分钟运行一次,并通过电子邮件通知任何已关闭的站点,请添加crontab作业:
*/5 * * * * /usr/bin/php /home/myuser/check_sites.php > /dev/null 2>&1通过本文,您将有希望了解crontab的自动化功能,以及如何使用它来自动化您生活中许多平凡和重复的任务。
您已经了解了什么是crontab,关于crontab文件,crontab作业是如何格式化的,以及如何利用它的一些实际示例。
自动化已经成为软件开发行业的一个集成部分。许多框架已经开发出来,允许用户通过使用几行代码自动完成重复任务来增强工作流。 ...
... 既然脚本可以工作了,是时候让它自动化了。最简单的方法是通过cron作业。Cron作业用于计划任务和脚本,例如自动备份。打开Crontab(计划任务列表): ...
... 下面的四个自动化应用程序可以让您专注于对自己重要的事情,而不是繁琐的维护任务。这节省了你的时间和脑力,可以在其他地方得到更好的利用。 ...
... CRON是一个健壮的Linux作业调度程序。它允许管理员使用crontab在Linux中调度任务。因此,限制谁可以运行CRON作业是至关重要的。您可以使用以下命令找出用户的所有活动cronjob。 ...
Bash脚本是一种高效的自动化任务的方法,特别是那些利用其他现有程序的任务。这种自动化通常需要重复几次类似的操作,这正是for循环进入自己的位置。 ...
...任何cron作业计划用于此用户帐户: sudo ls -lh /var/spool/cron/crontabs/eric 如果此位置中存在任何内容,则表示有cron作业排队等待该用户帐户。我们可以用这个crontab命令删除它们。-r(remove)选项将删除作业,-u(user)选项告诉crontab...
...cron中设置它,但是您必须记住在任务执行后返回并删除crontab条目,这很不方便。 对于Linux,如果你正在为一个问题而挣扎,这几乎可以保证其他人也在为这个问题而挣扎。幸运的是,因为类Unix的操作系统已经存在了很长时间,...