🐝
macOS 15 (Sequoia)でcronからlaunchdに変更したメモ
はじめに
In English
This article is a note on replacing cron with launchd, which stopped working on macos15 (sequoia) written in Japanese.
crontabに以下のように記述して起動させて問題なく動いていたプログラムがMacOS15(Sequoia) にアップグレードしたら動かなくなった。
*/5 * * * * /Users/HanakoYamada/Local/battery.py
launchdで設定するとcronと同じように定期的に実行できるようになったのでメモしておく。
launchdの設定
~/Library/LaunchAgents
にplist(プロパティリスト)ファイルを置く方法と/Library/LaunchDaemons
に置く方法がある。
~/Library/LaunchAgents
ユーザがログインしている時に実行され、ログインユーザの環境で実行される。
/Library/LaunchDaemons
ユーザがログインしてなくてもバックグランドで実行される。全てのユーザに影響を与える。
今回は/Library/LaunchDaemons
にplistファイルを置くことにし、com.HanakoYamada.battery.plist
の名前で以下のような内容のファイルを作成した。
com.HanakoYamada.battery.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>battery</string>
<key>ProgramArguments</key>
<array>
<string>/Users/HanakoYamada/Local/battery.py</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Minute</key>
<integer>0</integer>
</dict>
<dict>
<key>Minute</key>
<integer>5</integer>
</dict>
<dict>
<key>Minute</key>
<integer>10</integer>
</dict>
<dict>
<key>Minute</key>
<integer>15</integer>
</dict>
<dict>
<key>Minute</key>
<integer>20</integer>
</dict>
<dict>
<key>Minute</key>
<integer>25</integer>
</dict>
<dict>
<key>Minute</key>
<integer>30</integer>
</dict>
<dict>
<key>Minute</key>
<integer>35</integer>
</dict>
<dict>
<key>Minute</key>
<integer>40</integer>
</dict>
<dict>
<key>Minute</key>
<integer>45</integer>
</dict>
<dict>
<key>Minute</key>
<integer>50</integer>
</dict>
<dict>
<key>Minute</key>
<integer>55</integer>
</dict>
</array>
<key>StandardErrorPath</key>
<string>/Users/HanakoYamada/Library/Logs/battery_errors.log</string>
<key>StandardOutPath</key>
<string>/Users/HanakoYamada/Library/Logs/battery_errors.log</string>
</dict>
</plist>
ファイルのオーナ、モードの変更
$ sudo chmod 644 /Library/LaunchDaemons/com.HanakoYamada.battery.plist
$ sudo chown root:wheel /Library/LaunchDaemons/com.HanakoYamada.battery.plist
構文チェック
構文チェックをしたらOKと出た。
$ plutil -lint /Library/LaunchDaemons/com.HanakoYamada.battery.plist
/Library/LaunchDaemons/com.HanakoYamada.battery.plist: OK
launcdに登録
次のコマンドを実行してlaunchdに登録する
$ sudo launchctl load /Library/LaunchDaemons/com.HanakoYamada.battery.plist
このコマンドが上手くいかない場合、次のように実行する。
$ sudo launchctl bootstrap system /Library/LaunchDaemons/com.HanakoYamada.battery.plist
ログファイルの確認
plistファイルに以下のように記述したので、このログを確認する。
<key>StandardErrorPath</key>
<string>/Users/HanakoYamada/Library/Logs/battery_errors.log</string>
<key>StandardOutPath</key>
<string>/Users/HanakoYamada/Library/Logs/battery_errors.log</string>
ログファイルの内容表示
$ tail -f /Users/HanakoYamada/Library/Logs/battery_errors.log
Discussion