Mac上如何開機(jī)與關(guān)機(jī)時(shí)自動(dòng)運(yùn)行Shell腳本

網(wǎng)上講如何開機(jī)運(yùn)行腳本的很多,但我有關(guān)機(jī)時(shí)關(guān)閉遠(yuǎn)程服務(wù)的需求。于是上外網(wǎng)查了一下如何在關(guān)機(jī)時(shí)執(zhí)行一段腳本。

新建一個(gè)shell文件

這個(gè)shell中包含了你需要開機(jī)關(guān)機(jī)時(shí)運(yùn)行的腳本。

#!/bin/bash
function shutdown()
{

  # 關(guān)機(jī)用的腳本放這里

  exit 0
}

function startup()
{

  # 開機(jī)用的腳本放這里

  tail -f /dev/null &
  wait $!
}

trap shutdown SIGTERM
trap shutdown SIGKILL

startup;

以上文件我取名為launchdeamon,賦予了當(dāng)前用戶的執(zhí)行權(quán)限。

chmod 755 launchdaemon

新建plist文件

為了讓launchdeamon能在開機(jī)時(shí)自動(dòng)運(yùn)行,需要編寫一個(gè)相應(yīng)plist文件,使用launctl做到開機(jī)啟動(dòng)。關(guān)于launchctl和plist的作用,請先查看這篇文章:Mac執(zhí)行定時(shí)任務(wù)之launchctl。

plist文件的內(nèi)容如下:

<?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>boot-shutdown</string>

<key>ProgramArguments</key>
<array>
  <string>$SCRIPT_PATH/launchdaemon</string>
</array>

<key>RunAtLoad</key>
<true/>

<key>StandardOutPath</key>
<string>$LOG_PATH/boot-shutdown.log</string>

<key>StandardErrorPath</key>
<string>$PLOG_PATH/boot-shutdown.err</string>

</dict>
</plist>

plist文件以鍵值對的形式存儲信息。以上文件的字段解釋:

  • Label:標(biāo)簽,也就是運(yùn)行該plist顯示的名字。這里為boot-shutdown
  • ProgramArgumentsarray里可以存放多個(gè)需要運(yùn)行程序。這里的$SCRIPT_PATH請自己修改。
  • RunAtLoad:開機(jī)自啟,為true
  • StandardOutPath:打印標(biāo)準(zhǔn)輸出到某個(gè)文件,方便查看程序后臺運(yùn)行的結(jié)果,$LOG_PATH自行修改。
  • StandardErrorPath:打印標(biāo)準(zhǔn)錯(cuò)誤到某個(gè)文件,同上。

以上文件我取名為 boot-shutdown-script.plist 。

由于shell腳本的執(zhí)行權(quán)限是當(dāng)前用戶,以上文件需要放入當(dāng)前用戶的開機(jī)啟動(dòng)文件夾,即為 ~/Library/LaunchAgents 。

然后將plist文件加入開啟啟動(dòng):

launchctl load ~/Library/LaunchAgents/boot-shutdown-script.plist

此時(shí)重啟后,可以使用以下命令查看腳本運(yùn)行狀態(tài)

launchctl list | grep boot

輸出為

438 0   boot-shutdown

第一個(gè)是pid。第二個(gè)為狀態(tài)碼,為0說明正常運(yùn)行中。


參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容