我想通过 ssh 远程启动一个脚本,如下所示:

ssh [email protected] -t 'cd my/dir && ./myscript data [email protected]'

该脚本执行各种正常工作,直到遇到 nohup 一行:
nohup time ./myprog $1 >my.log && mutt -a ${1%.*}/`basename $1` -a ${1%.*}/`basename ${1%.*}`.plt $2 < my.log 2>&1 &

它应该启动程序 myprog,将其输出通过管道传输到 mylog 并发送一封电子邮件,其中包含由 myprog 创建的一些数据文件作为附件和日志作为正文。虽然当脚本到达这一行时,ssh 输出:



这里有什么问题?

谢谢你的帮助

最佳答案

您的命令在后台运行进程管道,因此调用脚本将立即退出(或很快退出)。这将导致 ssh 关闭连接。这反过来将导致 SIGHUP 被发送到附加到终端的任何进程,该终端是 -t 选项导致创建的。

您的 time ./myprog 进程受 nohup 保护,因此它应该继续运行。但是您的 mutt 不是,这很可能是这里的问题。我建议您将命令行更改为:

nohup sh -c "time ./myprog $1 >my.log && mutt -a ${1%.*}/`basename $1` -a ${1%.*}/`basename ${1%.*}`.plt $2 < my.log 2>&1 " &

所以整个管道都得到了保护。 (如果这不能解决它,则可能需要对文件描述符做一些事情 - 例如 mutt 可能有终端不在的其他问题 - 或者引用可能需要根据参数进行调整 - 但请尝试现在...)

10-07 16:28