Linux中如何在系統重啟時執行命令或腳本


眾所周知服務在Linux中服務能被增加到系統啟動時運行,這是沒有任何問題的,因為它們中的許多服務有它們自己的腳本,使用“chkconfig”“systemctl”命令完成例如,要在啟動時添加“Apache httpd” 服務,請根據您的系統管理器運行以下命令之一。同樣,您可以在啟動時根據需要添加任何眾所周知的服務。

對於 Sys V 初始化系統:

[root@localhost ~]# chkconfig --level 35 httpd on

對於 systemd 系統:

[root@localhost ~]# systemctl enable httpd

有時你需要增加一個自定義腳本或者命令或者服務在啟動時。那需要如何做呢?通過這篇文章,我們將介紹三種方法去實現它。

1,使用/etc/rc.d/rc.local文件

"/etc/rc.local"文件傳統上是在切換到多用戶運行級別的過程結束時啟動所有正常的計算機服務之后執行的。 此方法也適用於systemd 系統,您需要將腳本的位置添加到"/etc/rc.d/rc.local”文件中便於在啟動時運行。首先我們得確保這個文件有執行權限。

[root@sharplee sharplee]# chmod +x /etc/rc.d/rc.local

為了詳細的了解這一點,我們接下來將創建一個如下所示的簡單腳本,但您可以根據需要創建任何腳本:

腳本內容是:

[root@sharplee sharplee]# cat start.sh
#!/bin/bash
date >> /home/sharplee/on-boot-output.txt
hostname >> /home/sharplee/on-boot-output.txt

接下來添加一下剛才創建的start.sh 腳本的執行權限。

最后,我們把剛才創建的可執行腳本文件start.sh 添加到/etc/rc.d/rc.local文件的末尾。

[root@sharplee sharplee]#echo "/home/sharplee/start.sh" >> /etc/rc.d/rc.local

 配置完成之后,重啟系統,驗證一下是否啟動執行腳本了啟動之后可以看到以下文件已經創建。

2,使用 crontab 文件

 cron 在特定時間在后端自動執行計划的作業。這可以使用名為"@reboot"的特殊字符串和cron job輕松完成。

@reboot是一個特殊的字符串,允許用戶在啟動時(啟動時)運行任何命令或腳本。

本示例在系統重新啟動時運行"/home/sharplee/start.sh"文件。我們將使用在上面的示例中創建的相同腳本。並且刪除上面方法中/etc/rc.d/rc.local文件末尾添加的內容。為此,只需在 crontab 文件中添加以下條目:

[root@sharplee sharplee]# crontab -e
@reboot /home/sharplee/start.sh

 配置完之后,重啟系統。可以看到重啟之后腳本生成的文件中生成內容了。

 

3,使用systemd 單元

此方法僅適用於 systemd 系統,並且非常簡單。為此,您需要創建一個 systemd 啟動腳本並將其放在"/etc/systemd/system/"目錄中。以下時我們的啟動單元腳本示例:

[root@sharplee sharplee]# vi start.service

[Unit]
Description=Run a Custom Script at Startup
After=default.target

[Service]
ExecStart=/home/sharplee/start.sh

[Install]
WantedBy=default.target

接下來把創建好的service文件拷貝到/etc/systemd/system/目錄中。將service單元腳本放在 systemd 位置后,請運行以下命令以更新 systemd 配置文件並啟用該服務:

[root@sharplee sharplee]#systemctl daemon-reload
[root@sharplee sharplee]#systemctl enable start.service

 

接下來重啟系統,檢驗一下是否能夠重啟生效。

小提示:如果要在后台運行腳本,則需要啟動文件中添加尾隨 "&"符號。

[root@sharplee sharplee]#echo "/home/sharplee/start.sh &" >> /etc/rc.d/rc.local

如果要以其他用戶身份運行命令,請使用以下格式:

[root@sharplee sharplee]#echo "sudo -  $USER -c /home/sharplee/start.sh &" >> /etc/rc.d/rc.local

 $USER指的是Linux系統中的用戶,並且該用戶需要有執行該腳本的權限,以上后台運行的方法都是在超級管理員權限執行的,實際情況還得配置相應的權限。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM