Linux非root用戶設置service服務啟動【轉】


測試環境: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM