0

我们有一个命令来处理我们的 RHEL7 服务器与 Sudo 的 Privilege Manager 的连接,该命令在从 rc.local 脚本运行时不起作用。下面的命令使用更通用的名称而不是我们的特定资产。

回声“密码” | /opt/quest/sbin/pmjoin_plugin -b -a -v -q -d masterport=12345 -d FailOverTimeOut=10 -d selecthostrandom=YES somehostname.com someotherhostname.com >> /var/log/Build.log

该命令在手动运行或从其他 bash 脚本运行时可以完美运行,但是当它从 rc.local 中执行时,就好像在提示输入密码时密码没有被输入到命令中一样。

我读过一些建议,例如“plymouth quit”,但没有帮助。

任何人都有在 rc.local 脚本中以这种方式将密码“回显”到命令的经验,以便您可以通过提示输入密码的交互式脚本继续操作?

最终,这只是我们希望在第一次启动实例时运行的东西。因此,如果有另一种方法可以让 shell 脚本在启动时运行一次,然后在没有 rc.local 的情况下自行删除,那么我们也可以探索这条路线(crontab 等?)。

4

1 回答 1

0

我最终实施了一个适合我情况的解决方案。虽然它不像让事情在 rc.local 中运行那么干净,但它可以完成工作。

我从我们的 rc.local 脚本中取出命令并将其放入它自己的 .sh 脚本中。我们的 AMI 构建过程将其存储在 /tmp/nameofscript.sh 中,我还创建了一个 systemd 服务文件,AMI 进程将其存储在 /etc/systemd/system/nameofservicefile.service 中。该服务文件使用 ExecStart=/tmp/nameofscript.sh 执行,以便在重新启动时运行。我们的 rc.local 以阶段 1 和阶段 2 的方式运行,阶段 1 在最后重新启动,所以我在阶段 1 部分添加了一行,以在重新启动之前使用“systemctl enable nameofservicefile.service”启用服务。阶段1的最后一步。

走这条路线启用它,以便 PM Sudo join 命令在我们的“阶段 2”步骤期间运行,因为“阶段 1”结束时的重新启动触发了来自 systemd 服务的脚本。

为确保它不会在每次重新启动时运行,我的 /tmp/nameofscript.sh 脚本包含 rm -f /etc/systemd/system/nameofservicefile.server 并使用 rm -- "$0" 删除自身的步骤。

这样做可能是一种混乱的方式,但可以完成工作。

于 2016-06-07T16:07:07.540 回答