#macos #server #restart #launchd
#macos #сервер #перезапуск #launchd
Вопрос:
У меня есть приложение, которое обычно запускается в терминале. Для этого требуется сменить каталог на каталог приложения [cd /mydirectory] и запустить приложение ./PurplesoftServer
Я пытаюсь написать сценарий запуска для перезапуска приложения, если сервер перезапускается по какой-либо причине. Я сохранил скрипт в /Library/LaunchAgents
Это мой скрипт:
```<?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>PSM.Restart</string>
<key>ProgramArguments</key>
<array>
<string>/Users/stephenjay/Documents/HW/HW Customers/ACME server 200814</string>
<string>./PurpleSoftServer</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>```
Я также выполнил следующие команды в терминале, чтобы загрузить скрипт:
sudo launchctl load /Library/LaunchAgents/PSM.Restart.plist
sudo launchctl start PurplesoftServer
Кажется, что все запускается — после того, как я передал права собственности на plist root: wheel
Однако в конечном итоге приложение не запускается ни после выполнения команд Sudo, ни после фактического перезапуска сервера Mac.
Что я пропустил?
Ответ №1:
Первым элементом в ProgramArguments
массиве должен быть путь к исполняемому файлу, а не каталог к cd
к. Вместо этого вам нужно использовать WorkingDirectory
ключ. Что-то вроде этого:
...
<key>ProgramArguments</key>
<array>
<string>./PurpleSoftServer</string>
</array>
<key> WorkingDirectory</key>
<string>/Users/stephenjay/Documents/HW/HW Customers/ACME server 200814</string>
...
Кстати, вам нужно будет использовать sudo launchctl unload
для выгрузки плохой версии, затем sudo launchctl load
снова для загрузки исправленной версии.
Кстати, 2, sudo launchctl list PSM.Restart
предоставит вам больше информации о статусе запуска элемента.