3

我正在尝试使用 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

编辑

事实上,登录命令发出一个 chroot 命令,这是我的挑战的来源:

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

1 回答 1

0

您的基本问题是启动新进程chrootsu它们不会影响调用它们的进程。chroot创建一个新进程来运行命令susu命令最终创建一个新的 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命令。

于 2016-04-16T19:18:58.247 回答