我们有一个命令来处理RHEL7服务器与Sudo特权管理器的连接,该命令在从rc.local脚本运行时不起作用。下面的命令使用了更通用的名称,而不是我们的特定资产。
echo"password"|/opt/quest/sbin/pmjoin_plugin-b-a-v-q-d主端口=12345-d FailOverTimeOut=10-d selecthostrandom=YES somehostname.com someotherhostname.com>>/var/log/Build.log
该命令在手动运行或从其他bash脚本中运行时可以完美地工作,但在rc.local中执行时,当提示输入密码时,就好像密码没有通过管道传输到命令中一样。
我读过一些建议,比如"普利茅斯退出",但没有帮助。
任何人都有在rc.local脚本中以这种方式将密码"回显"到命令的经验,这样您就可以继续执行提示输入密码的交互式脚本了吗?
最终,这只是我们希望在第一次启动实例时运行的东西。因此,如果有另一种方法可以让shell脚本在启动时运行一次,然后在没有rc.local的情况下删除它自己,那么我们也可以探索该路由(crontab等?)。
我最终实现了一个适用于我的情况的解决方案。虽然它不像让事情在rc.local中运行那么干净,但它会完成任务。
我从rc.local脚本中提取了命令,并将其放入自己的.sh脚本中。我们的AMI构建进程将其存储在/tmp/nameofscript.sh中,我还创建了一个systemd服务文件,AMI进程将该文件存储在/etc/systemd/system/nameofservicefile.service中。该服务文件在执行时带有ExecStart=/tmp/name of script.sh,以便在重新启动时运行。我们的rc.local以阶段1和阶段2的方式运行,阶段1在最后重新启动,所以我在阶段1部分添加了一行,在作为阶段1最后一步的重新启动之前,用"systemctl-enable-nameofservicefile.service"启用服务。
走这条路线使它能够在我们的"阶段2"步骤中运行PM Sudo join命令,因为"阶段1"结束时的重新启动触发了来自systemd服务的脚本。
为了确保它不会在每次重新启动时都运行,我的/tmp/nameofscript.sh脚本有一些步骤来rm-f/etc/systemd/system/nameofservicefile.server,并用rm删除它自己——"$0"。
这可能是一种混乱的方式,但可以完成任务。