从远程服务器调用的脚本无法正确运行服务

时间:2018-09-11 13:52:35

标签: bash shell unix

我有一个Unix脚本,该脚本可以调用远程UNIX服务器上的另一个脚本。

除其他命令外,我正在停止服务。 stop命令本质上可以转换为

ssh -t -t -q ${AEM_USER}@${SERVERIP}   'bash -l -c "service aem stop"'

该服务已停止,但是当我重新启动该服务时,它只会创建.pid文件,而不执行启动。当我运行启动命令即

ssh -t -t -q ${AEM_USER}@${SERVERIP}   'bash -l -c "service aem start"'

它没有显示任何错误。在转到服务器并检查状态

service aemauthor status

显示以下消息

aem dead but pid file exists

另外,通过登录服务器启动服务时,它会与消息一起正常运行

Removing stale pidfile (pid: 8701)
Starting aem

2 个答案:

答案 0 :(得分:0)

我们不知道aem的服务脚本的详细信息。

我想这个问题与SIGHUP信号有关。当我们从外壳注销或与ssh断开连接时,操作系统将向在此终止的外壳中启动的所有进程发送std::unordered_multimap信号。如果该进程未处理HUP信号,则默认情况下将退出。

当我们通过ssh远程运行命令时,此命令启动的进程将在ssh会话终止后收到HUP信号。

我们可以使用nohup命令忽略HUP信号。

您可以尝试

HUP

如果可行,您可以使用ssh -t -t -q ${AEM_USER}@${SERVERIP} 'bash -l -c "nohup service aem start"' 命令在服务脚本中启动aem。

答案 1 :(得分:0)

the stale pidfile syndrome所述,pidfile停顿的原因有很多,例如,在进程退出时您处理其删除方式的一些问题……但是考虑到您在远程运行时的唯一体验,我可能会怀疑这可能与您的个人资料正在加载或未加载的内容有关...请在下面的帖子中查看投票率最高的可靠答案以获取一些见解:

如上述文章的评论中所述,您可以尝试在执行脚本进行测试之前尝试采购/etc/profile~/.bash_profile,甚至尝试在本地和远程执行env比较是否源变量。