【问题标题】:How do I write a script that restarts an application that runs in the Terminal on Mac server after the machine reboots?机器重新启动后,如何编写一个脚本来重新启动在 Mac 服务器上的终端中运行的应用程序?
【发布时间】:2020-08-27 23:34:32
【问题描述】:

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

我错过了什么?

【问题讨论】:

    标签: macos server restart launchd


    【解决方案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 来加载修复版本。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 2015-07-31
      相关资源
      最近更新 更多