Например, когда сервер загружается, мне нужно запустить Tomcat, и мне нужно запустить эмулятор Android, а затем дать ему несколько команд. Они уже в пути. Я знаком с Linux и понимаю основы демонов, и подозреваю, что это будет что-то подобное?
LaunchDaemons - предпочтительный способ сделать это в OS X. Каждый демон управляется файлом .plist в / Library / LaunchDaemons (для дополнительных демонов; встроенные демоны находятся в / System / Library / LaunchDaemons), который указывает, когда запускать демон (например, при загрузке, когда соединение получено через порт TCP, в определенное время и т. д.), какую команду и аргументы использовать для запуска демона и т. д. См. документацию разработчика Apple Воти найдите примеры в / System / Library / LaunchDaemons.
Одно большое предупреждение, если вы привыкли использовать другие системы запуска: по умолчанию launchd ожидает программы, которые он запускает не демонизировать себя. Эта страница предлагает запустить Tomcat со списком запуска с именем /Library/LaunchDaemons/org.apache.tomcat.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>Disabled</key>
<false/>
<key>Label</key>
<string>org.apache.tomcat</string>
<key>ProgramArguments</key>
<array>
<string>/Library/Tomcat/Home/bin/catalina.sh</string>
<string>run</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
(Обратите внимание, что catalina.sh получает команду «запустить», не "Начало".)
Если вам нужно запустить что-то, что нельзя предотвратить от демонизации, вам нужно добавить что-то вроде этого в .plist:
<key>KeepAlive</key>
<false/>
<key>AbandonProcessGroup</key>
<true/>