我想在计算机启动时启动一个 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
我无法将其launchd .plist
包含在这里,格式全部关闭。
我可以从命令行正常运行它:./startFS.sh
,但是当我创建 plist(通过 Lingon)时,什么也没有发生。
现在,运行时,它会向控制台输出几行。这可能是问题吗?
我尝试过添加前缀nohup
和后缀&
,但似乎没有任何组合可行。
答案1
将这样的属性列表保存为 /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>
确保该文件由 root 拥有。如果不是,则可以在不使用 sudo 的情况下加载该文件,但不会在登录时自动加载。然后注销并重新登录以测试程序是否已启动。
有关详细信息,请man launchd.plist
参阅守护进程和代理技术说明,或http://osxnotes.net/launchd.html。