我正在尝试使用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 -
答案 0 :(得分:0)
您的基本问题是chroot
和su
启动了新流程,它们不会影响调用它们的流程。 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
命令。