我有一个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
答案 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
比较是否源变量。