Я хотел бы запустить простой сценарий bash (независимо от того, вошел ли кто-либо в систему), как в /etc/cron.daily/
в Linux, но в Mac OS X Mountain Lion 10.8.4. Если это возможно, то как? Все, что нужно сделать, это скопировать (и, возможно, bzip
) файл.
2 ответа
Cron официально устарел, поэтому вы должны использовать launchd.
На Apple есть учебное пособие: https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html.
Хорошая отправная точка для объяснения, куда поместить файл plist
https://alvinalexander.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs
Чуть больше деталей можно найти на
Две вещи, которые меня смутили:
1) Обратите внимание на разницу между программой и программой.
2) Если задание, которое вы хотите запустить, является скриптом, оно должно иметь #!/bin/sh
, в противном случае launchd не может запустить его, и в результате вы получите сбойный код выхода / код состояния 78.
Используя cron, вы можете редактировать crontab суперпользователя, например, EDITOR=nano sudo crontab -e
. Когда я попытался добавить строку типа * * * * * say aa
, команда say была запущена даже после того, как я вышел из окна входа в систему.
Используя launchd, сохраните список свойств, например, как /Library/LaunchAgents/test.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>test</string>
<key>ProgramArguments</key>
<array>
<string>say</string>
<string>bb</string>
</array>
<key>StartInterval</key>
<integer>10</integer>
</dict>
</plist>
Затем запустите sudo chown root /Library/LaunchAgents/test.plist
и sudo launchctl load /Library/LaunchAgents/test.plist
. Команда say, запланированная launchd, также была запущена, когда я вышел из окна входа в систему.