設定Linux關機時自動執行指定命令

周小董發表於2019-01-30

我們一般設定Linux在開機時執行某條命令,關機時很少使用,本帖就介紹一下怎麼設定Linux在關機前自動執行某條命令。

要想在開機時執行某命令,我們只需把該命令寫入到/etc/rc.local檔案即可。如果要設定後臺服務,看下面, Python指令碼開機自啟動(Linux)


Python指令碼開機自啟動(Linux)

Python指令碼開機自動執行;本帖適用於使用systemd的Linux系統,現在流行的Linux發行版都使用systemd。

後臺服務程式是隨系統自啟動的,我們只要把Python指令碼配置為服務就行了。需要注意的一點是你Python指令碼的啟動時機,它依賴不依賴其他服務(網路連線、一些分割槽的掛載等等)。

1 Python指令碼

一個你要自啟動的Python指令碼,我使用 /home/snail/autorun.py為例。

2 建立Unit配置檔案

$  sudo vim  /lib/systemd/system/autorun.service

寫入如下內容:

[Unit]
Description=Test Service
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python  /home/snail/autorun.py

[Install]
WantedBy=multi-user.target

上面定義了一個叫 Test Service 的服務,它在multi-user環境起來之後執行;ExecStart引數指定我們要執行的程式;idle確保指令碼在其他東西載入完成之後執行,它的預設值是simple。

注意使用絕對路徑

為了獲得指令碼的輸出資訊,我們可以重定向到檔案:

ExecStart=/usr/bin/python  /home/snail/autorun.py  >  /home/snail/autorun.log  2>&1

更改配置檔案的許可權:

$  sudo chmod  644  /lib/systemd/system/autorun.service

3 使配置檔案生效

$  sudo systemctl daemon-reload
$  sudo systemctl enable autorun.service

4 重啟

$  sudo reboot

5 檢視服務狀態

$  sudo systemctl status autorun.service

Python指令碼開機自啟動(Linux)

Python指令碼開機自啟動(Linux)


systemd

如果你的系統使用systemd,你可以在/lib/systemd/system-shutdown/目錄中新增一個指令碼,systemd-halt.service會處理這個目錄中的指令碼。

示例(Ubuntu 16.04):

$ sudo vim /lib/systemd/system-shutdown/cleanup.service
[Unit]
Description=Run command at shutdown
# 假設要執行的命令依賴網路
Requires=network.target
DefaultDependencies=no
Before=shutdown.target reboot.target
 
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=<要執行的命令>(/bin/touch /home/snail/hello)
 
[Install]
WantedBy=multi-user.target

來源:http://blog.topspeedsnail.com/archives/10203#more-10203

相關文章