以 "real" root 身份执行命令的 .sh 脚本

.sh script that executes command as "real" root

我想编写一个 .sh 脚本来向我的 ejabberd 帐户发送一条消息。 (该脚本由 apache2 标准用户“www-data”“调用”)。

脚本应执行以下命令:ejabberdctl send_message chat admin@my-domain user@my-domain "title" "my message"

但是,我不能 运行 没有“成为”root 用户的任何 ejabberdctl 命令。所以 sudo ejabberdctl 不起作用(在终端或任何 .sh 脚本中)。我只能做 sudo -s 后跟 ejabberdctl my-command,这在 .sh-scripts 中不起作用(或者我错了吗?)。

(我已经在本教程的帮助下在 ubuntu 20.04 上安装了 ejabberd 20.07:Install Ejabberd...

有没有办法 运行 .sh-script 中的命令作为“真正的根”或创建根会话并 运行 那里的命令(就像我手动做的那样) sudo -s ...)?

我的问题有什么解决方案吗?或者我应该以“正常方式”安装 ejabberd 吗?

当从源代码编译和安装 ejabberd 时,可以用类似

的东西来准备它
./configure -–enable-group=ejagroup 

然后,您可以简单地创建系统组 ejagroup,并将 www-data 用户添加到 ejagroup。 参见 https://docs.ejabberd.im/admin/installation/#options

在你的例子中,你使用了 ProcessOne 的 Debian 软件包,我看到教程提到你创建了一个名为 ejabberd 的系统帐户。也许您可以从该帐户 运行 ejabberdctl,无需 root?

我仍然不知道为什么我只能 运行 ejabberdctl 当我是“logged-in” as root (sudo ejabberdctl 仍然无法正常工作)

我的.bashrc文件错了吗? (最后一行:PATH=$PATH:/opt/ejabberd-20.07/bin/

无论如何,至少我可以 运行 sudo /opt/ejabberd-20.07/bin/ejabberdctl my_command 与任何用户一起使用,就像他们在这里所做的那样: Ejabberd sbin/ejabberdctl 启动(没有这样的文件或目录)

其他人是否遇到过 sudo: any_command: not found 这种奇怪的行为?

如果您对我的问题有更“优雅”的解决方案,请告诉我。