MacOS ::使用crontab计划作业

在计算机上运行脚本很棒。自动运行它们甚至更大。如果您使用的是Mac(或Linux),则可以使用我们的好朋友crontab,这是一个计划工具,可以定期运行作业(脚本)。

crontab

您可以通过编辑作业列表将作业添加到crontab中。以以下格式(第一行)指定作业:

* * * * *  command to execute
│ │ │ │ │
│ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ └──────── month (1 - 12)
│ │ └───────────── day of month (1 - 31)
│ └────────────────── hour (0 - 23)
└─────────────────────── min (0 - 59)

示例

让我们做一个示例工作。我个人使用cronjobs定期对MySQL数据库进行备份,因此我将展示如何将其设置为每天运行一次。

我的脚本称为test.sh,它将把我的MySQL数据库转储到一个zip文件中。我们将通过编辑作业列表(使用nano编辑器)将其设置为作为cronjob运行:

env EDITOR=nano crontab -e

现在输入以下内容,然后按CTRL + O和CTRL + X保存并退出。

0 12 * * *  cd ~/my/folder && ./test.sh

这将在每天的12:00执行命令,该命令将更改为脚本的文件夹并运行它。双“&”号&&使您可以指定多个命令,这些命令将彼此依次运行。

请注意,如果您的计算机当时已关闭或处于睡眠状态,则该脚本要到第二天的指定时间才会运行。

要查看活动的crontab作业列表,请使用以下命令:

crontab -l

环境

第一次运行crontab作业时,即使您自己运行脚本也可以正常工作,您也可能会收到一个奇怪的“找不到命令”错误。这是因为crontab执行命令时未设置任何正常的环境变量。

要解决此问题,您可以在脚本的开头添加PATH,以便它知道如何查找类似mysqldump以下的程序:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin
…

禁用邮件提醒

因此,在设置脚本并且一切正常之后,您可能会注意到终端突然开始向您发送电子邮件。

您可以通过在crontab文件的顶部插入以下行来禁用此行为:

MAILTO=""

现在,您的工作将保持沉默。

尖端

这里有一些小片段可能会派上用场:

描述脚本
Execute on workdays 1AM0 1 * * 1-5 /bin/execute/this/script.sh
Execute every 10 minutes*/10 * * * * /bin/execute/this/script.sh
Log output to file*/10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2>&1