每日/每周/每月维护任务如何工作以及如何实现自动化?

Flo*_*nt2 2 maintenance automation macos

MacOS 自带每日/每周/每月系统任务。但是看起来我必须手动启动这些任务。有没有办法每天/每周/每月自动执行这些任务?

Dan*_*eck 6

它们之所以这样命名是因为它们已经每天、每周和每月执行。MainMenu 只是让您手动执行它们。

打开终端并输入以下内容:

ls -al /var/log/*.out
Run Code Online (Sandbox Code Playgroud)

这些日志文件名旁边列出的日期是上次执行相应维护任务的日期:

-rw-r--r--  1 root  wheel  496994  5 Mar 03:15 /var/log/daily.out
-rw-r--r--  1 root  wheel    2088  1 Mar 06:02 /var/log/monthly.out
-rw-r--r--  1 root  wheel    5289  5 Mar 03:15 /var/log/weekly.out
Run Code Online (Sandbox Code Playgroud)

使用periodic命令手动运行它们。您需要root权限才能这样做,并且需要提供您要执行的权限。要运行所有这些:

sudo periodic daily weekly monthly
Run Code Online (Sandbox Code Playgroud)

您可以使用 AppleScript 编辑器制作脚本或应用程序,通过输入以下内容来执行例如每周任务:

do shell script "periodic weekly" with administrator privileges
Run Code Online (Sandbox Code Playgroud)

使用 Automator,您可以将其变成一项服务。


要更改定期安排这些任务的时间,请编辑其首选项文件:

/System/Library/LaunchDaemons/com.apple.periodic-daily.plist
/System/Library/LaunchDaemons/com.apple.periodic-weekly.plist
/System/Library/LaunchDaemons/com.apple.periodic-monthly.plist
Run Code Online (Sandbox Code Playgroud)

您可以使用Apple 的开发人员工具中包含的属性列表编辑器,或一个简单的文本编辑器。寻找<key>StartCalendarInterval</key>. 当它们运行时是不言自明的:

如果可以,每天在凌晨 3:15 运行:

<dict>
    <key>Hour</key>
    <integer>3</integer>
    <key>Minute</key>
    <integer>15</integer>
</dict>
Run Code Online (Sandbox Code Playgroud)

每周一次,周六运行:

<dict>
    <key>Hour</key>
    <integer>3</integer>
    <key>Minute</key>
    <integer>15</integer>
    <key>Weekday</key>
    <integer>6</integer>
</dict>
Run Code Online (Sandbox Code Playgroud)

每月的第一天一次:

<dict>
    <key>Hour</key>
    <integer>5</integer>
    <key>Minute</key>
    <integer>30</integer>
    <key>Day</key>
    <integer>1</integer>
</dict>
Run Code Online (Sandbox Code Playgroud)

该网站解释了运行这些脚本时会发生什么。