如何在涉及登录时编写bash脚本

时间:2016-04-16 14:53:43

标签: bash ansible gluu

我正在尝试使用Ansible编写Gluu Server的安装脚本。 我最后有以下脚本,应该启动最终设置。问题是脚本在登录后停止,如果我退出则重新启动:

#!/bin/bash
/etc/init.d/gluu-server-2.4.2 login
cd /install/community-edition-setup/
./setup.py -n -u  -a   -s -f setup.properties

修改

实际上,login命令会发出chroot命令,这是我挑战的来源:

/usr/sbin/chroot /opt/gluu-server-2.4.2/ su -

1 个答案:

答案 0 :(得分:0)

您的基本问题是chrootsu启动了新流程,它们不会影响调用它们的流程。 chroot创建一个新进程来运行su命令,su命令最终创建一个新的shell进程。它是这个具有更改的根目录的新shell。退出该shell时,它将继续执行您的脚本,从未更改过root。然后在错误的上下文中执行./setup.py命令。

解决方案是在su创建的过程中执行命令。类似的东西:

#!/bin/bash
/usr/sbin/chroot /opt/gluu-server-2.4.2/ su -l -c "
    cd /install/community-edition-setup/;
    ./setup.py -n -u  -a   -s -f setup.properties"

如果./setup.py需要与用户交互或需要控制终端,这可能无效。在这种情况下,您可能需要以下内容:

#!/bin/bash
/usr/sbin/chroot /opt/gluu-server-2.4.2/ /bin/bash -l -c "
    cd /install/community-edition-setup/;
    ./setup.py -n -u  -a   -s -f setup.properties"

在这种情况下,脚本已经需要以root身份运行,但通常需要root才能调用chroot命令。