測試環境:Fedora7,管理員:root,普通用戶:test1
實現目標:在Linux啟動時,自動運行位於普通用戶test1根目錄下的腳本程序test.py,該程序會在每次執行時自動向本地日志文件追加一條記錄,源碼如下:
from datetime import datetime now = datetime.now() f = open( ' test.log ' , ' a ' ) f.write( ' %s ' % now) f.close()
Linux在啟動時,會自動執行/etc/rc.d目錄下的初始化程序,因此我們可以把啟動任務放到該目錄下,有兩種辦法:
方案一:
1.因為其中的rc.local是在完成所有初始化之后執行,因此我們可以把啟動腳本寫到里面
2.用root賬號登陸Linux,vi /etc/rc.d/rc.local編輯文件,在最后加入兩行需要執行的腳本程序:
cd / home / test1 -- 該步不可少,否則會提示沒有權限打開 ' test.log ' 文件
su - test1 - c " python /home/test1/test.py " -- 把要執行的命令作為一個參數傳遞級su
方案二:
1.init.d目錄下都為可執行程序,他們其實是服務腳本,按照一定格式編寫,Linux 在啟動時會自動執行,類似Windows下的服務
2.用root帳號登錄,vi /etc/rc.d/init.d/mystart,追加如下內容:
# ! / bin / bash # chkconfig: 2345 80 05 --指定在哪幾個級別執行,0一般指關機,6指的是重啟,其他為正常啟動。80為啟動的優先級,05為關閉的優先機 # description :mystart service RETVAL = 0 start () { --啟動服務的入口函數 echo -n " mystart serive ... " cd / home / test1 su - test1 -c " python /home/test1/test.py " } stop () { --關閉服務的入口函數 echo " mystart service is stoped... " } case $ 1 in --使用case,可以進行交互式操作 start ) start ;; stop ) stop ;; esac exit $ RETVAL
3.運行chmod +r /etc/rc.d/init.d/mystart,使之可直接執行
4.運行chkconfig --add mystart,把該服務添加到配置當中
5.運行chkconfig --list mystart,可以查看該服務進程的狀態
總結:
兩種方案的的核心都是切換用戶到test1,然后執行命令啟動Python程序,做成服務的好處是可以定義多個交互命令,比如:start,stop,restart,reset...,在服務運行的過程中還可以做相應操作。需要注意的是在切換到test1帳號時,一定不要忘了"su - "后面的橫杠,它表示使用test1的用戶環境變量,因為有些程序需要依賴該賬號下的環境變量才能正常運行,比如:java程序,否則程序可能無法正常啟動.
轉自
版權聲明:本文為CSDN博主「sinboy」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sinboy/article/details/2466225
參考
linux非root用戶執行開機啟動程序 - 翔雲123456 - 博客園
https://www.cnblogs.com/lanyangsh/p/8543433.html