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