我想通过 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 可能有终端不在的其他问题 - 或者引用可能需要根据参数进行调整 - 但请尝试现在...)