コンピューターの運用管理で、定期的にコマンド実行するのは良くあることである。 管理者権限が必要な場合、UNIX では伝統的に次のようにしてきた。
% su Password: むにゃむにゃ (これで一時的に root に switch user する) # crontab -e (root として crontab の設定をする) |
今の macOS では、 こういうのは cron でなく launchdaemon を使うのがお勧めだそうだが、 cron で済ますことも出来る。
% sudo crontab -e Password: むにゃむにゃ (こうすると、root として crontab の設定をすることになる) |
なるほど。というか、何かですでにやったことがあるような気もする。 (…チェックしたら、個人ユーザーと root でまじっていたことが判明した。 うわあ。)
それはさておき、LaunchDaemon でやる方法も書いておく。
毎週月曜の午前3時に /usr/local/bin/myscript.sh を実行するための設定。
| /Library/LaunchDaemons/com.example.myscript.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>com.example.myscript</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/myscript.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Weekday</key>
<integer>1</integer>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>StandardOutPath</key>
<string>/var/log/myscript.log</string>
<key>StandardErrorPath</key>
<string>/var/log/myscript.err</string>
</dict>
</plist>
|
sudo chown root:wheel /Library/LaunchDaemons/com.example.myscript.plist sudo chmod 644 /Library/LaunchDaemons/com.example.myscript.plist |
sudo launchctl load /Library/LaunchDaemons/com.example.myscript.plist |
man launchd.plist |