我寫了一個bash腳本來連續檢查服務。該腳本具有一些功能,並且還調用其他源bash文件,並在手動執行時正常工作。該腳本有一個連續的循環語句類似,OSX爲bash腳本執行創建launchd服務
while true; do
{
$path/is_it_running
if [ "$?" == "0" ]; then
{
echo "yes, it is running"
$path/test
if [ "$?" != "0" ]; then
fix_the_issues
fi
}
else
echo "It is not running!"
fi
sleep 10
}
done
/Library/LaunchDaemons/my.own.service.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>my.own.service</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/path/to/bash/script</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/my-service.log</string>
</dict>
</plist>
sudo launchctl load -w /Library/LaunchDaemons/my.own.service.plist
/var/log/system.log :
com.apple.xpc.launchd[1] (com.apple.quicklook[80608]): Endpoint has been activated through legacy launch(3) APIs. Please switch to XPC or bootstrap_check_in(): com.apple.quicklook
問題是我現在面臨: 手動執行時,該腳本沒有正確運行。我可以說啓動觸發腳本,因爲我可以看到「是的,它正在運行」和「它沒有運行!」來自plist StandardOutPath日誌文件/var/log/my-service.log
的消息。
任何人都可以幫助我成功運行bash腳本作爲服務嗎?不像debian/centos,我在osx上看起來很困難。順便說一下,這是OSX EI Captain和Sierra版本。
嘗試在腳本開頭放置一個合適的shebang'#!/ bin/bash'並從參數數組中刪除'bash'。此外,嘗試縮進你的shell腳本,使其易讀並通過http://shellcheck.net運行它 –
腳本文件在頂部和所有其他源文件中都有'#!/ bin/bash'。我可以刪除plist參數。如果它正在運行或沒有完美運行,它會迴應,但在服務運行或未運行時不會執行某些操作。我一直在測試這個腳本文件,它的工作原理就是我想要的。它在某處使用'sudo'來提示輸入密碼,我不認爲launchd等待這個回答,因爲它以root身份運行,是嗎? – user465465