如何在 Ubuntu Server 17.10 上啟動時執行腳本?
如何在 Ubuntu Server 17.10 機器上啟動時執行腳本?我認為該方法在 17.10 中已更改。
將腳本放在適當的使用者
cron
表(即crontab)中,時間表為@reboot
.使用者可以使用 編輯其
cron
表crontab -e
。
/path/to/script.sh
將在啟動時執行的範例:@reboot /path/to/script.sh
如果您需要以 root 身份執行它,請不要使用
@reboot sudo /path/to/script.sh
;用於
sudo crontab -eu root
編輯 root 的 crontab。另請參閱: crontab(1)、cron(8)、crontab(8)
Ubuntu 15.04 及更高版本預設使用名為 的東西
systemd
,這是一個(某種)程序,可自動啟動服務和程序。您可以自己製作並將其添加到啟動服務列表中,只需一點點努力。基本系統服務
這是一個準系統
.service
文件,可用於啟動我的 python gui 伺服器(可能是一個 shell 腳本,沒關係):[Unit] Description=Python GUI Server [Service] ExecStart=/home/pi/software/GUI_POE.py & [Install] WantedBy=multi-user.target
該
Description
選項是描述服務是什麼或做什麼的任何字元串。該
ExecStart
選項指定要執行的命令。在這裡,我給出了一個可執行 python 腳本的路徑,並使用&
令牌在後台執行它。該
WantedBy
選項根據要使用此服務的目標來指定優先級。如果您不需要您的服務在任何特定時間執行,那麼只需將其設置為multi-user.target
.基本程序
nano
使用或您選擇的任何編輯器編寫您希望在啟動時執行的腳本。確保在文件的最頂部包含正確的 shebang(#!/bin/bash
對於 bash 腳本),並使用chmod
.- 只需在名為 my_service.service 的文件中編寫您的服務,然後將其複製到正確的目錄中
cp my_service.service /lib/systemd/system/
。- 啟動您的服務:
sudo systemctl start my_service.service
. 這將啟動您告訴您的服務執行的任何腳本。使用“stop”而不是 start 的相同命令將其關閉。- 將您的服務添加到啟動過程中:
sudo systemctl enable my_service.service
. 要刪除它,只需在同一命令中將“啟用”替換為“禁用”即可。就是這樣!請記住,您的腳本將自動以 root 權限執行,因為這是 systemd 服務中的預設設置。
我的簡單範例(完整)
作為參考,這是我擁有的一個簡單的 systemd 服務,它使用 Dash 啟動一個簡單的 Python GUI 伺服器:
[Unit] Description=Python GUI Server After=network-online.target [Service] Type=simple WorkingDirectory=/home/pi/software ExecStart=/home/pi/software/GUI_POE.py & Restart=always RestartSec=15s KillMode=process TimeoutSec=infinity User=pi Group=pi [Install] WantedBy=multi-user.target
此範例服務使用 Python3 腳本,但公式與 shell 腳本完全相同。
進一步閱讀可以在DigitalOcean的這個優秀教程中找到,這個 AskUbuntu 執行緒提供了一個很好的答案,幫助我學習了 systemd。希望這可以幫助!