我喜欢使用Homebrew在Mac上安装各种软件包和应用程序。 安装,升级和删除它们要容易得多。 另外,它与我的dotfile配置非常有效。
唯一的警告是,由于Homebrew不会删除旧版本的安装文件,因此您必须运行命令来定期清理它们。
前几天,仅通过运行以下两个命令,我就设法在Mac上恢复了近1GB的空间:
$酿造清理
$酿造桶清洁
这节省了大量的空间,而我要做的就是每个月左右运行一次这两个命令。
但是,如果我可以定期安排这些命令会更好,这样我就不必记住每个月都要运行它们。
介绍cron and crontab
cron是执行在crontab文件中找到的计划命令的守护程序。
创建一个crontab文件
通过运行以下命令可以查看是否有现有的crontab文件:
crontab -l
要创建crontab文件,只需运行:
$ crontab -e
这将启动您的默认编辑器(通常为vim )并打开crontab文件进行编辑。
* * * * *回声“这将每分钟运行一次”
设定时间和日期
让我们遍历每列表示的内容:
- 分钟[0–59]
- 小时[0–23]
- 每月的某天[1-31]
- 月[1–12]
- 星期几[0-6](其中0代表星期日,6代表星期六)
- 要执行的shell命令
添加*表示每一个,因此分钟列中的*表示每分钟运行此命令。 如果要在上午8点安排一次命令,然后在下午8点安排一次命令,则可以在小时栏中输入8,20 。
这里有些例子:
0 16 * * 0回显“每个星期天下午4点”
20 8 * * 1,5回显'每个星期一和星期五的8.20am'
0 0 31 12 *回声“ 12月31日午夜”
警告 :您必须使用制表符,而不要在每个字段之间使用空格。
根据Apple的手册页,您可以在month和day of the week字段中使用月和日名称的前三个字母(例如mon , tue , jan , feb )代替使用数字。
您可以做的另一件事是用以下简写替换数据和时间字段:
@reboot在启动时运行一次。
@yearly每年运行一次,“ 0 0 1 1 *”。
@每年(与@yearly相同)
@monthly每月运行一次,“ 0 0 1 * *”。
@weekly每周运行一次,“ 0 0 * * 0”。
@daily每天运行一次,“ 0 0 * * *”。
@midnight(与@daily相同)
@hourly每小时运行一次,“ 0 * * * *”。
设置环境变量
cron具有自己的环境变量,其PATH设置为:
路径= / usr / bin:/ bin
这意味着,如果您尝试运行brew命令,则cron会抱怨找不到该命令。 因此,我们必须通过在crontab文件中指定PATH来更改它。
路径= / usr / local / bin:/ usr / bin:/ bin
* * * * * Brew更新
从单独的文件运行命令
实际上,我不仅要运行brew update ,还需要在单独的shell脚本中编写命令,然后将路径添加到脚本中。 现在, crontab文件如下所示:
路径= / usr / local / bin:/ usr / bin:/ bin
* * * * * /path/to/your/shell/commands.sh
要允许cron运行shell脚本,必须更改权限以使其可执行:
chmod u + x /path/to/your/shell/commands.sh
你有邮件
您可能已经注意到,由于cron是守护程序,您将无法在终端中看到它的运行情况。 那么我们如何知道cron作业是否已成功执行?
好吧,事实证明,每次计划程序运行时, cron都会向您发送一封电子邮件。 您可以通过终端中的mail命令访问以下消息:
$邮件
这列出了您收到的所有消息。 当然,如果您希望通过电子邮件将其发送到实际的电子邮件帐户,则可以将以下内容添加到您的crontab文件中:
MAILTO =“ someone@somewhere.com”
将crontab文件添加到您的dotfiles
如果可以将crontab文件集成到dotfiles ,那将是非常不错的dotfiles ,因此,当我运行脚本时,它们将添加一个crontab文件并为我安排它。
为此,我将创建两个文件:
-
cron.txt—crontab文件 -
cron.sh—要运行的命令
cron.txt添加到cron.txt文件中:
路径= / usr / local / bin:/ usr / bin:/ bin
* * * * * /some/path/cron.sh
在cron.sh文件中,我具有要运行的所有shell命令:
#!/ bin / bash
酿造更新
酿造升级
冲泡清理
酿造桶清洁
接下来,我可以运行一个命令,用我刚刚创建的文件覆盖任何现有的crontab文件。 警告 :这将覆盖所有现有的crontab文件。
$ crontab /some/path/cron.txt
大! 因此,我现在要做的就是在dotfiles添加文本文件,并相应地修改dotfile脚本。
您可以在此处查看我的dotfiles GitHub存储库中的cron.txt和cron.sh文件。