Mac - 在启动时运行 java 程序

emd*_*emd 6 java command-line osx-server macos

我想在计算机启动时启动一个 java 程序(服务器程序)。我可以完美地从命令行运行它。

我创建了/Library/Server/startFS.sh. 该文件可由 root 执行并包含:

cd /Library/Server/FiloSync
/usr/bin/java -jar /Library/Server/FiloSync/filosync-server-latest.jar -p 7000 -s 7001
Run Code Online (Sandbox Code Playgroud)

我无法launchd .plist在这里包含我的内容,格式已全部关闭。

我可以从命令行运行它:./startFS.sh,但是当我创建 plist(通过 Lingon)时,没有任何反应。

现在,当运行时,它会向控制台输出几行。这可能是问题吗?

我试过 prependingnohup和 append &,但似乎没有组合工作。

Lri*_*Lri 5

将这样的属性列表保存为 /Library/LaunchAgents/some.label.plist:

<?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>some.label</string>
  <key>ProgramArguments</key>
  <array>
    <string>java</string>
    <string>-jar</string>
    <string>/Library/Server/FiloSync/filosync-server-latest.jar</string>
    <string>-p</string>
    <string>7000</string>
    <string>-s</string>
    <string>7001</string>
  </array>
  <key>RunAtLoad</key>
  <true/> <!-- run the program at login -->
  <key>KeepAlive</key>
  <true/> <!-- run the program again if it terminates -->
  <key>WorkingDirectory</key>
  <string>/Library/Server/FiloSync</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

确保该文件归 root 所有。如果不是,可以不用sudo加载,但是登录时不会自动加载。然后注销并重新登录以测试程序是否已启动。

欲了解更多信息,请参阅man launchd.plist守护进程和代理技术说明,或http://osxnotes.net/launchd.html