一鍵啟動,永不停歇:如何將你的 Shell 腳本變為 system 服務?
背景介紹
從 Ubuntu 17.10 版本開始,系統默認不再包含 /etc/rc.local 文件了,這是因為systemd已經成為了主要的系統初始化工具。不過別擔心,如果你希望在開機時自動運行一些特定的命令,可以通過創建一個簡單的 Shell腳本,并將其設置為一個 systemd 服務來輕松實現這個需求哦!
實現方法
這里以一個簡單的腳本為例,將需要開機自動執行的命令寫入腳本文件內,賦予可執行權限。腳本內容如下:
這個腳本的主要任務是持續關注 /var/log/auth.log 文件。一旦發現有異常登錄的情況,它會自動收集嘗試登錄的用戶名以及該用戶的IP地址。接著,它會利用 ipinfo.io 來查找這些IP地址的具體位置信息。最后,通過一個第三方的通知工具,比如釘釘,將這些重要信息即時發送給您,確保您可以及時了解到任何不尋常的活動。
賦予該腳本可執行的權限:
chmod +x /root/script/monitor_login.sh
創建systemd文件
在 /etc/systemd/system 目錄中創建一個新的服務文件,例如 monitor-login.service:
sudo nano /etc/systemd/system/monitor-login.service
然后將以下內容添加到該文件中:
[Unit]
Description=Login Failure Monitoring Service
After=network.target
[Service]
ExecStart=/root/script/monitor_login.sh
Restart=on-failure
User=root
# 環境變量設置(如果有)
Environment="LOG_FILE=/var/log/auth.log"
[Install]
WantedBy=multi-user.target
配置說明:
[Unit]:
- Description:服務的描述。
- After=network.target:確保網絡啟動后再啟動此服務。
[Service]:
- ExecStart:指定腳本路徑。
- Restart=on-failure:如果腳本因錯誤退出,會自動重啟。
- User=root:使用 root 用戶運行該服務(如果需要)。
- Environment:設置環境變量,如 LOG_FILE。確保腳本中讀取 $LOG_FILE 的位置正確。
[Install]:
- WantedBy=multi-user.target:服務將在系統的多用戶目標下啟動,通常為默認運行級別。
重新加載systemd配置并啟動服務
執行下面的命令, 重新加載systemd配置。
sudo systemctl daemon-reload
通過執行systemctl status monitor-login.service查看服務啟動狀態,如下圖所示:
最后通過執行下面的命令,設置開機自啟動。
sudo systemctl enable monitor-login.service
通過執行如下命令查看開機啟動項:
systemctl list-unit-files --type=service | grep enabled | grep login
可以看到自定義的服務已經設置成功了,如下圖所示:
驗證
當檢測到有用戶異常登錄時,我們的釘釘會收到如下圖所示的溫馨提醒,以幫助我們及時關注并處理可能的安全問題。
腳本獲取方式
上述腳本已經上傳上傳到gitee,有需要的小伙伴可以自行獲取。gitee上的倉庫主要是分享一些工作中常用的腳本。小伙伴可以frok或者watch倉庫,這樣有更新可以及時關注到。
倉庫地址:https://gitee.com/didiplus/script