我想通过 ssh 远程启动一个脚本,如下所示:
ssh [email protected] /cdn-cgi/l/email-protection -t 'cd my/dir && ./myscript data [email protected] /cdn-cgi/l/email-protection'
该脚本执行各种工作,直到遇到 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 输出:
与remote.org 的连接已关闭。
这里有什么问题?
谢谢你的帮助
您的命令在后台运行进程管道,因此调用脚本将立即退出(或很快退出)。这将导致 ssh 关闭连接。这反过来又会导致SIGHUP
发送到连接到终端的任何进程-t
导致创建选项。
Your 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 可能会因终端不存在而出现其他问题 - 或者引用可能需要根据参数进行调整 - 但请尝试一下现在...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)