編寫后臺進程的管理腳本,使用service deamon-name stop的時候,出現如下提示:
/sbin/service: line 66: 23299 Terminated env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${OPTIONS}
原因:
我把管理腳本的名稱設為和后臺進程名稱一樣,即:
后臺進程名稱:deamon-name,
腳本名稱:/etc/init.d/deamon-name
腳本中有一句:
killall deamon-name
執行service deamon-name stop,本意是調用deamon-name腳本,結束后臺進程deamon-name,結果連“service deamon-name stop”這條進程也被結束了。
解決方法:
把后臺進程與腳本設置不同名稱即可。
?
?
?
如何讓腳本實現開機自啟動:
?
/etc/rc.d/init.d :實際上無論init.d放在什么地方,它都發揮著相同的作用。為了能夠使用init.d目錄下的腳本,需要有root權限或sudo權限。每個腳本都將被作為一個命令運行
命令的結構大致如下所示:
/etc/init.d/command 選項(/etc/init.d目錄下文件都是755的權限)
comand是實際運行的命令,選項可以有如下幾種:
start
stop
reload
restart
force-reload
?
大多數的情況下,會使用 ? start,stop,restart ? 選項。例如,如果想關閉網絡,可以使用如下形式的命令:
/etc/init.d/networking stop ?(直接運行即可,Centos6.7中是network沒有ing)
又比如,你改變了網絡設置,并且需要重啟網絡。你可以使用如下命令:
/etc/init.d/networking restart
init.d目錄下常用初始化腳本有:
networking
samba
apache2
ftpd
sshd
dovecot
mysql
。。。。。。。。。
。。。。。。。。。
注:/etc/rc.d/init.d下的文件中都會有 ?# chkconfig: 2345 10 90 的字樣,如果要自己在init.d目錄下寫腳本 ?這里要注意
?
二、關于/etc/rc.local(也是一種開機自啟動腳本的方式)
rc.local是經常使用的一個腳本。
該腳本是在系統初始化級別腳本運行之后再執行的,因此可以安全地在里面添加任意位置的腳本作為系統啟動之后執行的腳本。
常見的情況是你可以再里面添加nfs掛載/mount腳本。
此外,你也可以在里面添加一些調試用的腳本命令。
例如,samba服務總是無法正常運行,而檢查發現,samba是在系統啟動過程中就該啟動執行的,
也就是說
samba守護程序配置保證了這種功能本應該正確執行。
碰到這種類似情況,一般也懶得花大量時間去查為什么,因此只需要簡單的在/etc/rc.local腳本里追加上:
/etc/init.d/samba start
這樣就成功的解決了samba服務異常的問題。
?
?
?
第三種情況:
在 /etc/init.d 目錄下增加對應程序啟動腳本,然后重啟測試,內容如下:
chkconfig --add 腳本名(將該腳本注冊到系統服務,此時直接輸入腳本可以直接運行)。
chkconfig 腳本名 on(將該服務加入隨系統開機啟動),添加自啟動,必須在腳本里面加入chkconfig 啟動順序,才能加入進去
/etc/rc.local 中部分命令無法執行(
在linux系統中添加隨系統啟動而自動運行的服務,只需在/etc/rc.local 腳本文件中添加即可,當運行的命令或程序不帶路徑時,例如:
#!/bin/bash
distccd --user nobody --allow 10.10.98.0/24 --log-file=/var/log/distcc.log --verbose --daemon
loadavg -s 10.10.98.20 >/dev/null 2>&1
注意,distccd、loadavg命令存放在/usr/local/bin/目錄下
在系統執行這些命令時將報錯,無法正常執行!
由于在執行rc.local腳本時,PATH環境變量未全部初始化,目錄/usr/local/bin/ 需在執行/etc/profile 后才被添加到環境變量PATH中。
解決方法:
在 /etc/rc.local 執行 /usr/local/bin/ 目錄中的命令需要使用絕對路徑。?