啟動 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...