我一直很好奇,在啓動 Linux 系統並登陸的過程當中到底發生了什麼事情。按下開機鍵或啓動一個虛擬機,你就啓動了一系列事件,以後會進入到一個功能完備的系統中,有時,這個過程不到一分鐘。當你註銷或者關機時,也是這樣。linux
更有意思的是,在系統啓動以及用戶登陸或註銷時,還可讓系統執行特定的操做。bash
本文,咱們將探討一下在 Linux 操做系統中實現這些目標的傳統方法。操作系統
注意:咱們假定使用的是 Bash 做爲登陸及註銷的主 Shell。若是你使用的是其餘 Shell,那麼有些方法可能會無效。若是有其餘的疑問,請參考對應的 Shell 文檔。.net
在啓動時執行 Linux 腳本
code
有兩種傳統的方法能夠實如今啓動時執行命令或腳本:進程
方法 #1 - 使用 cron 任務
事件
除了經常使用格式(分 / 時 / 日 / 月 / 周)外,cron 調度器還支持 @reboot 指令。這個指令後面的參數是腳本(啓動時要執行的那個腳本)的絕對路徑。crontab
然而,這種方法須要注意兩點:ip
a) cron 守護進程必須處於運行狀態(一般狀況下都會運行),同時
文檔
b) 腳本或 crontab 文件必須包含須要的環境變量(若是有的話,參考 StackOverflow 獲取更多詳細內容)。
方法 #2 - 使用 /etc/rc.d/rc.local
這個方法對於 systemd-based 發行版 Linux 一樣有效。不過,使用這個方法,須要授予 /etc/rc.d/rc.local 文件執行權限:
# chmod +x /etc/rc.d/rc.local
而後在這個文件底部添加腳本。
下圖說明如何分別使用 cron 任務和 rc.local 運行兩個示例腳本(/home/gacanepa/script1.sh 和 /home/gacanepa/script2.sh)。
script1.sh:
#!/bin/bash DATE=$(date +'%F %H:%M:%S') DIR=/home/gacanepa echo "Current date and time: $DATE" > $DIR/file1.txt
script2.sh:
#!/bin/bash SITE="Tecmint.com" DIR=/home/gacanepa echo "$SITE rocks... add us to your bookmarks." > $DIR/file2.txt
*啓動時執行 Linux 腳本 *
記住,必定要提早給兩個示例腳本授予執行權限:
$ chmod +x /home/gacanepa/script1.sh $ chmod +x /home/gacanepa/script2.sh
在登陸或註銷時執行 Linux 腳本
要在登陸或註銷時執行腳本,分別須要使用 ~.bash_profile 和 ~.bash_logout 文件。多數狀況下,後者須要手動建立。在每一個文件的底部,添加調用腳本代碼,如前面例中所示,就能夠實現這個功能。