網(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文件以鍵值對的形式存儲(chǔ)信息矾兜。以上文件的字段解釋:
-
Label
:標(biāo)簽损趋,也就是運(yùn)行該plist顯示的名字。這里為boot-shutdown -
ProgramArguments
:array
里可以存放多個(gè)需要運(yùn)行程序椅寺。這里的$SCRIPT_PATH
請自己修改舶沿。 -
RunAtLoad
:開機(jī)自啟,為true
-
StandardOutPath
:打印標(biāo)準(zhǔn)輸出到某個(gè)文件配并,方便查看程序后臺(tái)運(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)行中。
參考: