1

我需要通过SSH远程启动Jboss 7.1.1的服务。但是当执行命令时并没有发生。

命令:ssh user@server '/etc/init.d/jboss-as start' #(no error, no service started)

脚本 jboss-as:

#!/bin/sh
case "$1" in
    start)
        echo "Starting JBoss AS 7"
        su --command "/path/to/jboss-as-7.1.1.Final/bin/standalone.sh >& /dev/null &" root
    ;;
    stop)
        echo "Stopping JBoss AS 7"
        su --command "/path/to/jboss-as-7.1.1.Final/bin/jboss-cli.sh --connect command=:shutdown" root
    ;;
    *)
        echo "Usage: /etc/init.d/jboss-as {start|stop}"
        exit 1
    ;;
esac
exit 0

如何执行命令:ssh user@server 'service jboss-as start'ssh user@server '/etc/init.d/jboss-as start'

  • 与 ssh 连接正常
  • Jboss 服务器没问题
  • 如果我执行代码:ssh user@server '/etc/init.d/mysql restart'它会发生!
4

2 回答 2

0

好的。我们走吧。

  1. 搜索 jboss 服务的名称:

    ls /etc/init.d/ |grep 'jboss'返回“jboss-as”。没关系!

  2. 权限:

    ls -al /etc/init.d/ |grep 'jboss'返回完全相同的输出: -rwxr-xr-x. 1 root root 2979 Sep 19 05:34 jboss-as没关系!

还是不行。执行此命令的主要目标是使用 SWT 和实现 SSH 的库(称为 JSCH)的 Java 程序中的按钮操作。看代码:

Session session = jsch.getSession("user", "SERVER_IP_ADDRESS", PORT);
session.setPassword("pass");
java.util.Properties config = new java.util.Properties(); 
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand("'/etc/init.d/jboss-as start'"); #command to start jboss service
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
于 2013-10-25T01:17:08.203 回答
0

一些事情之一是限制您使用命令运行此服务的能力,因为这是启动服务的有效方法。

user@server '/etc/init.d/jboss-as start'

所有这些都可以在启动 SSH 连接后远程测试。SSH 进入服务器并使用您要使用上述命令连接的同一用户启动服务。

首先使用 ls /etc/init.d/ |grep 'jboss' 确保服务实际上被称为 'jboos-as'。结果将与您调用命令的方式完全相同,因此将 jboss-as 替换为 grep 的输出。

其次,这是初始化脚本的权限问题。从我在网上看到的情况来看,您必须创建此脚本,因此如果权限设置不正确,它将不会执行。

要检查运行ls -al /etc/init.d/ |grep 'jboss',您的输出应如下所示:

输出:

-rwxr-xr-x.  1 root root   2979 Sep 19 05:34 jboss*

发出启动命令的用户需要匹配列出的第一个用户。在这种情况下,第一个“根”和/或与示例中的第二个“根”的组列表在同一组中。如果您的用户在 wheel 组中,这可能会有所不同,但通常服务以 root 或该服务的特定用户身份运行。

最后更重要的方面是文件是可执行的。ls -al这在上面的输出中列为 x 值。如果没有列出“x”,则需要使用以下命令使文件可执行:

chmod +x /etc/init.d/jboss

重要的是,上述所有命令都需要您在第一个 grep 命令中引用该文件,因此 /etc/init.d/jboss-as 或 /etc/init.d/jboss 或 /etc/init.d/jboss -有些不同。

我希望这对您有所帮助,如果没有,请发布 ls -al 输出的结果,我们可以进一步帮助您。

于 2013-10-24T03:34:31.000 回答