在MAC OS X上如何啟用crontab?
阿新 • • 發佈:2019-02-01
project: blog
target: how-to-enable-crontab-on-osx.md
date: 2015-12-16
status: publish
tags:
- OS X
- MAC
- crontab
- 定時任務
categories:
- OS X
- crontab
背景
本本上又一些東東是比較重要的,我使用了git進行管理,從而可以將其備份到某個git倉庫上。可是鄙人喜歡偷懶,不喜歡老是手動執行備份的一系列命令,於是乎我就想到了寫個備份指令碼,想通過 crontab 來定期備份。
指令碼寫好了,也加了一條crontab:
# m h dom mon dow command
30 11,17 * * * /Users/clarence/bin/daily-backup
可是,為啥到點沒有執行呢?
問了下度娘和谷哥,結果很多文章都是關於如何用OS X現在自帶的 launchctl 來執行定時任務的。可是呢,鄙人這個指令碼是像每天上午和下午都要執行的,用 launchctl 來搞的話有點嫌麻煩。故今天非要探究下如何啟用crontab。結果不一會兒就找到了原因,現分享如下:
如何啟用crontab
首先,既然OS X的定時任務統統都由 launchctl 來管理了,就看看 cron 任務有沒有在裡面:
$ LaunchAgents sudo launchctl list | grep cron
83968 0 com.vix.cron
果然在裡面。那就檢查下這個啟動項的配置:
$ LaunchAgents locate com.vix.cron
/System/Library/LaunchDaemons/com.vix.cron.plist
$ LaunchAgents cat /System/Library/LaunchDaemons/com.vix.cron.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.vix.cron</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/cron</string>
</array>
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/etc/crontab</key>
<true/>
</dict>
</dict>
<key>QueueDirectories</key>
<array>
<string>/usr/lib/cron/tabs</string>
</array>
<key>EnableTransactions</key>
<true/>
</dict>
</plist>
注意裡面有個KeepAlive的條件是 /etc/crontab 是否存在:
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/etc/crontab</key>
<true/>
</dict>
</dict>
所以呢,那就看看是否是因為這個 /etc/crontab 不存在導致 cron 裡面的任務無法正常執行:
$ LaunchAgents ll /etc/crontab
ls: /etc/crontab: No such file or directory
果然,這個檔案不存在。
那就建立吧!
$ sudo touch /etc/crontab
再試試 cron 任務是否成功啟動... 果然能成功啟動了!
target: how-to-enable-crontab-on-osx.md
date: 2015-12-16
status: publish
tags:
- OS X
- MAC
- crontab
- 定時任務
categories:
- OS X
- crontab
背景
本本上又一些東東是比較重要的,我使用了git進行管理,從而可以將其備份到某個git倉庫上。可是鄙人喜歡偷懶,不喜歡老是手動執行備份的一系列命令,於是乎我就想到了寫個備份指令碼,想通過 crontab 來定期備份。
指令碼寫好了,也加了一條crontab:
# m h dom mon dow command
30 11,17 * * * /Users/clarence/bin/daily-backup
可是,為啥到點沒有執行呢?
問了下度娘和谷哥,結果很多文章都是關於如何用OS X現在自帶的 launchctl 來執行定時任務的。可是呢,鄙人這個指令碼是像每天上午和下午都要執行的,用 launchctl 來搞的話有點嫌麻煩。故今天非要探究下如何啟用crontab。結果不一會兒就找到了原因,現分享如下:
如何啟用crontab
首先,既然OS X的定時任務統統都由 launchctl 來管理了,就看看 cron 任務有沒有在裡面:
$ LaunchAgents sudo launchctl list | grep cron
83968 0 com.vix.cron
果然在裡面。那就檢查下這個啟動項的配置:
$ LaunchAgents locate com.vix.cron
/System/Library/LaunchDaemons/com.vix.cron.plist
$ LaunchAgents cat /System/Library/LaunchDaemons/com.vix.cron.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.vix.cron</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/cron</string>
</array>
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/etc/crontab</key>
<true/>
</dict>
</dict>
<key>QueueDirectories</key>
<array>
<string>/usr/lib/cron/tabs</string>
</array>
<key>EnableTransactions</key>
<true/>
</dict>
</plist>
注意裡面有個KeepAlive的條件是 /etc/crontab 是否存在:
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/etc/crontab</key>
<true/>
</dict>
</dict>
所以呢,那就看看是否是因為這個 /etc/crontab 不存在導致 cron 裡面的任務無法正常執行:
$ LaunchAgents ll /etc/crontab
ls: /etc/crontab: No such file or directory
果然,這個檔案不存在。
那就建立吧!
$ sudo touch /etc/crontab
再試試 cron 任務是否成功啟動... 果然能成功啟動了!
收工~
自己感覺:sudo touch /etc/crontab 這條命令最簡單解決問題,但是具體原因和其他解決辦法還是參考
https://superuser.com/questions/359580/error-adding-cronjobs-in-mac-os-x-lion 連結。