Я хотел бы запустить простой сценарий bash (независимо от того, вошел ли кто-либо в систему), как в /etc/cron.daily/ в Linux, но в Mac OS X Mountain Lion 10.8.4. Если это возможно, то как? Все, что нужно сделать, это скопировать (и, возможно, bzip) файл.

2 ответа2

0

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

Чуть больше деталей можно найти на

http://www.launchd.info

Две вещи, которые меня смутили:

1) Обратите внимание на разницу между программой и программой.

2) Если задание, которое вы хотите запустить, является скриптом, оно должно иметь #!/bin/sh , в противном случае launchd не может запустить его, и в результате вы получите сбойный код выхода / код состояния 78.

0

Используя 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, также была запущена, когда я вышел из окна входа в систему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .