我有一個Java套接字服務器,我寫的允許我保持Web羣集代碼庫同步。當我從一個shell登錄時運行的腳本init.d中像這樣Java Jar作爲守護進程運行exec()
[[email protected] www]# /etc/init.d/servermngr start
註銷,所有將正常工作,但如果在服務器重新啓動或運行我使用的服務,像這樣
[[email protected] www]# service servermngr start
中的init.d任何傳遞給套接字服務器的exec()命令都不會在Linux機器上執行。我假設它與沒有真正shell的JVM有關。如果我登錄並運行
[[email protected] www]# /etc/init.d/servermngr start
...並且註銷所有運行良好所有CVS命令都會執行。
,當作爲套接字服務器響應狀態檢查服務,因此在運行
這裏運行另外一個需要注意的是腳本init.d中
#!/bin/sh
# chkconfig: 2345 95 1
# description: Starts Daemon Using ServerManager.jar.
#
# Source function library.
. /etc/init.d/functions
start() {
echo -n $"Starting ServerManager: "
# start daemon
cd /www/servermanager/
daemon java -jar ServerManager.jar > /www/logs/ServerManager.log &
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/cups
echo "";
return $RETVAL
}
stop() {
# stop daemon
echo -n $"Stopping $prog: "
kill `ps uax | grep -i "java -jar ServerManager.ja[r]" | head -n 1 | awk '{print $2}'`
RETVAL=$?
echo "";
return $RETVAL
}
restart() {
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: servermngr {start|stop}"
exit 3
esac
exit $RETVAL
和Java負責實際執行的代碼:
// Build cmd Array of Strings
String[] cmd = {"/bin/sh", "-c", "cd /www;cvs up -d htdocs/;cvs up -d phpinclude/"};
final Process process;
try {
process = Runtime.getRuntime().exec(cmd);
BufferedReader buf = new BufferedReader(new InputStreamReader(
process.getInputStream()));
// Since this is a CVS UP we return the Response to PHP
if(input.matches(".*(cvs up).*")){
String line1;
out.println("cvsupdate-start");
System.out.println("CVS Update" + input);
while ((line1 = buf.readLine()) != null) {
out.println(line1);
System.out.println("CVS:" + line1);
}
out.println("cvsupdate-end");
}
} catch (IOException ex) {
System.out.println("IOException on Run cmd " + CommandFactory.class.getName() + " " + ex);
Logger.getLogger(CommandFactory.class.getName()).log(Level.SEVERE, null, ex);
}
THX任何幫助
你有沒有什麼消息? – Ingo
我檢查了我寫入的日誌文件,它正在接收命令。它只是不在服務器上執行 – Ehask
[root @ web11〜]#tail -f /www/logs/ServerManager.log 服務器啓動ip 192.168.56.151 服務器啓動端口4444 MaxConnections:0 CVS更新:cd/www; cvs up -d htdocs /; cvs up -d phpinclude/ CVS更新:cd/www; cvs up -d htdocs /; cvs up -d phpinclude/ 因此,這些命令使它成爲'進程= Runtime.getRuntime()。exec(cmd);' @Ingo – Ehask