我正在使用bash版本bash 3.0启动ftam服务器(CentOS 5上的ft820.rc
),我遇到了从脚本启动它的问题,即在我做的脚本中
ssh -nq root@$ip /etc/init.d/ft820.rc start
并且脚本在此行之后不会继续,但是当我在由$ip
/etc/init.d/ft820.rc start
我会在服务启动后立即收到提示。
这是在ft820.rc
SPOOLPATH=/usr/spool/vertel
BINPATH=/usr/bin/osi/ft820
CONFIGFILE=${SPOOLPATH}/ffs.cfg
# Set DBUSERID to any value at all. Just need to make sure it is non-null for
# lockclr to work properly.
DBUSERID=
export DBUSERID
# if startup requested then ...
if [ "$1" = "start" ]
then
mask=`umask`
umask 0000
# startup the lock manager
${BINPATH}/lockmgr -u 16
# update attribute database
${BINPATH}/fua ${CONFIGFILE} > /dev/null
# clear concurrency locks
${BINPATH}/finit -cy ${CONFIGFILE} >/dev/null
# startup filestore
${BINPATH}/ffs ${CONFIGFILE}
if [ $? = 0 ]
then
echo Vertel FT-820 Filestore running.
else
echo Error detected while starting Vertel FT-820 Filestore.
fi
umask $mask
答案 0 :(得分:1)
我在这里(根据@Patryk的要求)重新发布了我在问题评论中的内容:
“在命令行中执行ssh时是否相同?即,您是否可以在不输入密码的情况下连接,使用一对private_local_key和您之前插入目标根目录的相应public_key @ $ ip :〜/ .ssh / authorized_keys文件? - Olivier Dulac 20小时前“
“你这么说,在命令行(而不是在脚本中)你可以ssh root @ ....并且它可以在不要求你的pwd的情况下工作吗?(即,它可以从脚本运行吗?) - Olivier Dulac 20小时前“
“尝试没有'-n'的ssh,甚至没有-nq:ssh root @ $ ip /etc/init.d/ft820.rc start(你甚至可以添加ssh -v,它会告诉你本地(1 :)和远程(2 :)事件以非常冗长的方式,帮助知道它被卡住的地方) - Olivier Dulac 19小时前“
“还:在脚本中的”ssh ...“行之前,再创建一行,例如:ssh root @ ip”set; pwd; ID ; whoami“并查看它是否有效并显示正确的信息。这可能有助于确保ssh部分正常工作。”set“部分还将显示正在运行的shell(例如:如果它包含BASH =,那么你正在运行bash 。否则SHELL = ...应该提供关于调用哪个shell的良好提示(有时不正确) - Olivier Dulac 19小时前“
“请在没有'-n'的情况下尝试(=在后台运行并等待,而不是仅运行然后退出)。它不起作用,尝试将-t -t -t(3次)添加到ssh,强制它分配一个tty。但首先,请放弃'-n'。 - Olivier Dulac 18小时前“
显然有效的方法是将-t
选项添加到ssh命令中。 (你可以设置'-t -t -t'来进一步强制它尝试分配tty,具体取决于具体情况)
我想这是因为调用的命令预计会在交互式会话中运行,因此需要“tty”作为标准输出
一种可能性(但只是一个疯狂的猜测):调用的rc脚本输出信息,但是在缓冲环境中(即,当没有通过终端启动时),调用脚本看不到足够的行来填充缓冲区和开始打印任何东西(比如当你在缓冲环境中做一个“grep something | somethings else”并且在缓冲区足够大以显示任何内容之前ctrl + c:你最终认为grep没有线条,而有也许已经在缓冲区中的几行了。关于缓冲有很多话题,我刚刚开始阅读这一切。强制ssh分配tty使被调用的命令认为它正在输出到实时终端会话,并且可能已关闭缓冲并允许结果显示。也许在第一种情况下,它也有效,但你永远看不到输出?