我正在尝试为我的一个脚本执行远程命令。我必须在许多服务器上运行此脚本。所以我会把它放在一个脚本中。我想做的是
ssh root@10.158.42.12 nohup perl /script/myscript.pl 06/04/2014 60 &
脚本运行得很好但是每当您尝试登录时都会显示一条信息消息。你们中的许多人都会熟悉..
|-----------------------------------------------------------------|
| This system is for the use of authorized users only. |
| Individuals using this computer system without authority, or in |
因此,除非按下输入,否则将执行脚本执行。我想把脚本放在cronjob中进行自动执行,所以我不需要看到这条信息。
答案 0 :(得分:2)
这是我的理论:
您的命令不会在服务器后台运行该程序。它运行在服务器上的前台运行程序,然后运行后台ssh
。
由于ssh
在后台运行,您会立即返回到提示符。
毫秒之后,ssh
将使用此消息覆盖您的提示并运行该命令。
您现在正在查看ssh消息而没有提示。
按下回车键,会导致在下一行重新绘制提示。
这会让您相信ssh
实际上正在等待您按Enter键。实际上,命令已经运行了,bash已准备好接受新命令,只是被ssh噪声所掩盖。
如何测试:
如果我是对的,按 Ctrl + L 而不是Enter将清除屏幕并显示bash提示。 (假设您不使用bash的vi
模式)。
如果我不是, Ctrl + L 将改为执行任何操作,再次打印ssh消息或只写^L
到屏幕。
如果我是对的,如何解决:
ssh -f root@10.158.42.12 'nohup perl /script/myscript.pl 06/04/2014 60 &' 2> /dev/null