首先,當你有問題時,第一個該試的就是問大語言模型
大語言模型回答得很好
我這邊就簡單的講一下所需步驟
1. 建立 systemd service unit file
基本上這類型的檔案都會放在 /etc/systemd/system 這個目錄下
舉例來說,我的 script 叫做 my-script.sh
而我想要建立一個 my-script.service
我只需要打開 terminal 並執行
sudo nano /etc/systemd/system/my-script.service
2. 在上面的指令打開檔案後,加入下列內容
[Unit]
Description=My Custom Script
After=network.target
[Service]
ExecStart=/bin/bash /path/to/your/script.sh
WorkingDirectory=/path/to/working/directory
StandardOutput=journal
StandardError=journal
Restart=on-failure
User=your_user_name
Group=your_group_name
[Install]
WantedBy=multi-user.target
這邊補充一些項目
(a) ExecStart 其實可以寫成
ExecStart="/path/to/your/script.sh"
然後以我自己的情況來說
(b) WorkingDirectory 我會寫成 sh 的 folder
也就是下面這樣
WorkingDirectory=/path/to/your
(c) [Unit] 裡面的 After 如果不需要的話可以留空
After=
直接刪掉也許也可以吧
(d) Restart 除了 "on-failure" 之外,還有 "always"
(e) 還有一個參數叫做 RestartSec
RestartSec=60
應該是掛掉後 隔 60 秒再啟動
(f) User, Group 那些都可以刪掉沒差
sudo apt update
sudo apt install samba
(g) Type 目前遇到都是寫 simple 就可以了
(h) StandardOutput, StandardError 用來輸出 logs (目前沒用過)
3. 重新讀取 service file
sudo systemctl daemon-reload
4. 啟用 service
sudo systemctl enable my-script.service
5. 開始 service
sudo systemctl start my-script.service
6. 檢查 service 狀態
sudo systemctl status my-script.service
7. 停止 service
sudo systemctl stop my-script.service
註: 如果你的 sh 沒有執行權限,可以使用下列指令
chmod +x /path/to/your/script.sh
大概就這樣吧,寫成 service 就可以很輕鬆地背景執行了
沒有留言:
張貼留言