Shell-Script

如何在 Ubuntu Server 17.10 上啟動時執行腳本?

  • June 4, 2021

如何在 Ubuntu Server 17.10 機器上啟動時執行腳本?我認為該方法在 17.10 中已更改。

將腳本放在適當的使用者cron表(即crontab)中,時間表為@reboot.

使用者可以使用 編輯其croncrontab -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.

基本程序

  1. nano使用或您選擇的任何編輯器編寫您希望在啟動時執行的腳本。確保在文件的最頂部包含正確的 shebang(#!/bin/bash對於 bash 腳本),並使用chmod.
  2. 只需在名為 my_service.service 的文件中編寫您的服務,然後將其複製到正確的目錄中cp my_service.service /lib/systemd/system/
  3. 啟動您的服務:sudo systemctl start my_service.service. 這將啟動您告訴您的服務執行的任何腳本。使用“stop”而不是 start 的相同命令將其關閉。
  4. 將您的服務添加到啟動過程中: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。希望這可以幫助!

引用自:https://unix.stackexchange.com/questions/416137