Как мне написать скрипт, который перезапускает приложение, запущенное в терминале на сервере Mac после перезагрузки компьютера?

#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 предоставит вам больше информации о статусе запуска элемента.