crontab 在mac上不執行問題研究

  1. crontab是個管理定時任務的工具,做用是在特定時間(經過crontab的語法配置),自動執行特定任務(想讓它執行什麼,就寫個腳本或bash命令)。當你天天都須要執行腳本幹一些重複工做的時候,這個東西就派上用場了。
  2. 不瞭解這個東西怎麼用的朋友,能夠經過點擊這裏進行一個基本瞭解。
  3. 這篇文章主要是爲了記錄本身在寫crontab時踩得一些坑,當我按照順序作完配置以後,卻發現crontab中的task怎麼也跑步起來,因而google了一下問題,找到了幾個相關blog,結合在一塊兒驗證,終於解決了問題。

crontab 爲啥不執行呢?html

  • 問了一下谷歌,OS X的定時任務通通由 launchctl 來管理的,看看 cron 任務有沒有在裏面
➜  ~ sudo launchctl list | grep cron
    208    0    com.vix.cron
    有記錄。查看一下啓動項的配置。
    ➜  ~ locate com.vix.cron
    
    WARNING: The locate database (/var/db/locate.database) does not exist.
    To create the database, run the following command:
    
    sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
    
    Please be aware that the database can take some time to generate; once
    the database has been created, this message will no longer appear.
  • database 不存在啊,那就建立一個吧。
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
    // 這個指令會花費必定時間
  • 一段時間後,建立成功,而後查看
~ 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 是否存在
➜  ~ ll /etc/crontab
ls: /etc/crontab: No such file or directory
  • 查看得知,該文件不存在,建立該文件。
➜  ~  sudo touch /etc/crontab
  • 最終,就能夠成功執行了。

須要注意的是,sh腳本中的路徑,最好使用絕對路徑,不然腳本極可能將沒法正確執行linux

相關文章
相關標籤/搜索