gpt4 book ai didi

作为守护进程运行的 Java Jar 无法发出 exec()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:06 25 4
gpt4 key购买 nike

我有一个我编写的 java 套接字服务器,它允许我保持 Web 集群代码库同步。当我像这样从 shell 登录运行 init.d 脚本时

[root@web11 www]# /etc/init.d/servermngr start

注销并且一切正常,但是如果服务器重新启动或者我使用这样的服务运行 init.d

[root@web11 www]# service servermngr start

传递给套接字服务器的任何 exec() 命令都不会在 linux 机器上执行。我假设它与没有真正外壳的 JVM 有关。如果我登录并运行

[root@web11 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);
}

感谢任何帮助

最佳答案

您尝试运行的命令是什么? cd 不是一个程序,如果你有 ; 你有多个命令。您只能运行一个程序!

关于作为守护进程运行的 Java Jar 无法发出 exec(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7094892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com