啟動 登入 登出時執行Linux指令碼

2022-09-07 09:54:11 字數 3315 閱讀 1577

啟動 linux 系統並登入的過程中到底發生了什麼事情,按下開機鍵或啟動乙個虛擬機器,你就啟動了一系列事件,之後會進入到乙個功能完備的系統中,當你登出或者關機時,也是這樣。更有意思的是,在系統啟動以及使用者登入或登出時,還可以讓系統執行特定的操作。

注意:我們假定使用的是 bash 作為登入及登出的主 shell。如果你使用的是其他 shell,那麼有些方法可能會無效

除了常用格式(分 / 時 / 日 / 月 / 周)外,cron 排程器還支援@reboot指令。這個指令後面的引數是指令碼(啟動時要執行的那個指令碼)的絕對路徑。

然而,這種方法需要注意兩點:

我們可以通過crontab -e來設定

$ crontab -e

@reboot /home/alvin/auto_run_script.sh

linux在啟動時,會自動執行/etc/rc.d目錄下的初始化程式,因此我們可以把啟動任務放到該目錄下,/etc/rc.d/目錄下的初始化程式很多,rc.local是在完成所有初始化之後執行的,所以在這裡做手腳很合適。

init.d目錄下都為可執行程式,他們其實是服務指令碼,按照一定格式編寫,linux 在啟動時會自動執行,類似windows下的服務。

對於 systemd-based 發行版 linux 同樣有效。不過,使用這個方法,需要授予/etc/rc.d/rc.local檔案執行許可權。

$ vim auto_run_script.sh

#!/bin/bash

date >> /home/alvin/output.txt

hostname >> /home/alvin/output.txt

$ vim /etc/rc.d/rc.local

/home/alvin/auto_run_script.sh

本方法僅適用於 systemd 系統。如何區分是不是 systemd 系統?很簡單,只需執行ps aux命令,檢視 pid 為 1 的程序是不是 systemd

我們需要建立乙個 systemd 啟動服務,並把它放置在/etc/systemd/system/目錄下

我們建立的 systemd 啟動服務如下。請注意,這時字尾是.service,而不是.sh

$ vim auto_run_script.service

[unit]

description=run a custom script at startup

after=default.target

[service]

execstart=/home/alvin/auto_run_script.sh

[install]

wantedby=default.target

從服務的內容可以看出來,我們最終還是會呼叫 /home/alvin/auto_run_script.sh 這個指令碼。

然後,我們再把這個指令碼放置在/etc/systemd/systerm/目錄下,之後我們再執行下面兩條命令來更新 systemd 配置檔案,並啟動服務。

$ systemctl daemon-reload

$ systemctl enable auto_run_script.service

1、分別使用~.bash_profile~.bash_logout檔案,在每個檔案的底部,新增呼叫的指令碼**

2、在/etc/profile.d/目錄下新建sh指令碼,/etc/profile會遍歷/etc/profile.d/*.sh

示例:

vi .bash_profile

/home/es/auto_run_script.sh

vi auto_run_script.sh

#!/bin/bash

date >> /home/es/output.txt

hostname >> /home/es/output.txt

nohup /home/es/elk/es/es1/bin/elasticsearch > /home/es/elk/es/es1/nohup.out 2>&1 &

nohup /home/es/elk/es/es2/bin/elasticsearch > /home/es/elk/es/es2/nohup.out 2>&1 &

nohup /home/es/elk/es/es3/bin/elasticsearch > /home/es/elk/es/es3/nohup.out 2>&1 &

nohup /home/es/elk/kibana/kibana-7.10.1-linux-x86_64/bin/kibana > /home/es/elk/kibana/kibana-7.10.1-linux-x86_64/nohup.out 2>&1 &

幾個指令碼的區別

(1)/etc/profile:此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行. 並從/etc/profile.d目錄的配置檔案中蒐集shell的設定。

(2)/etc/bashrc:為每乙個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取(即每次新開乙個終端,都會執行bashrc)。

(3)~/.bash_profile:每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次。預設情況下,設定一些環境變數,執行使用者的.bashrc檔案。

(4)~/.bashrc:該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該該檔案被讀取。

(5)~/.bash_logout:當每次退出系統(退出bash shell)時,執行該檔案. 另外,/etc/profile中設定的變數(全域性)的可以作用於任何使用者,而~/.bashrc等中設定的變數(區域性)只能繼承 /etc/profile中的變數,他們是」父子」關係。

(6)~/.bash_profile:是互動式、login 方式進入 bash 執行的

(7)~/.bashrc:是互動式 non-login 方式進入 bash 執行的通常二者設定大致相同,所以通常前者會呼叫後者。

通過CMD啟動MATLAB的同時執行M指令碼

之前寫過乙個這個知識點的總結,當時有點疑惑,不知道為什麼我測試的時候有時候可以有時候不行。今天終於發現了我之前一直忽略的乙個細節,matlab中m指令碼可以當做乙個命令來使用,但是使用的時候是不帶有字尾名稱的。而matlab的命令引數中,r選項是用於啟動的時候執行命令的選項。做一下測試如下 1,d盤...

利用Crontab定時執行Python指令碼

一 crontab操作crontab l 列出全部定時任務crontab e 編輯定時任務二 crontab格式第一列的 表示 分 第二列的 表示 時 第三列的 表示 日 第四列的 表示 月 第五列的 表示 周三 定時執行python指令碼 1 python3 test test.py 每小時執行一...

linux登出登入使用者

linux登出登入使用者 然後刪除該使用者 如下 進入根使用者 su 或者 su root w 或者 who a user tty from login idle jcpu pcpu what ch tty7 0 08 44 2 30m 12 09 0.16s gnome session ch pt...