我在服务器上有一个shell脚本,我从一个php页面调用,这是从数据库中传输数据的api的一部分。
shell脚本在我的服务器和位于数据库所在的防火墙后面的第三方服务器之间设置端口绑定。我在两个服务器之间设置了密码少ssh,当我在终端中运行脚本执行没有问题时我可以刷新我的php页面并从他们的数据库返回数据。
lsof -n -i:3311 | grep LISTEN | awk '{ print $2 }' | uniq | xargs -r kill -9
ssh -fNg -L 3311:127.0.0.1:3306 user@ipaddress
当服务器丢失/删除绑定时,php代码正在尝试重新启动连接,我无法再执行mysql查询
shell_exec("sh start_sever.sh");
然而,脚本需要永远运行并且页面超时。但它会执行shell脚本,如果我注释掉shell_exec行,则会返回数据。
你能想到
吗?1)为什么两个服务器之间的绑定会定期丢失? 2)为什么shell_exec命令会杀死页面 - 像ls -a这样的简单命令运行正常。 3)运行cronjob的解决方案是否每隔x分钟执行一次shell脚本是一个更好的主意
由于
答案 0 :(得分:0)
您是否为在网络服务器和目标服务器上运行网络服务器和目标服务器或拥有帐户的帐户设置了ssh身份验证?
当脚本在这种情况下超时时,可能是因为它们正在等待STDIN,如果您没有为运行Web服务器和目标服务器的帐户设置密钥身份验证,则会出现这种情况。它会期望输入密码,并且会等到发生这种情况或者php超出shell_exec。