在计算机重启后,如何编写脚本来重启在Mac服务器上的Terminal中运行的应用程序?

问题描述

我有一个通常在终端中运行的应用程序。这需要将目录更改为应用程序目录[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服务器之后,应用程序都不会最终运行。

我错过了什么?

解决方法

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加载固定版本。

BTW2,sudo launchctl list PSM.Restart将为您提供有关项目运行状态的更多信息。