1. 程式人生 > 其它 >Linux中如何在系統重啟時執行命令或指令碼

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系統中的使用者,並且該使用者需要有執行該指令碼的許可權,以上後臺執行的方法都是在超級管理員許可權執行的,實際情況還得配置相應的許可權。