root用户登录时启动服务

root用户登录时启动服务

我有两个脚本,第二个脚本依赖于第一个脚本:

b_reb

此脚本为第二个脚本创建单元文件。该服务应仅在用户登录a_reb后启动,并应在与 相同的会话中执行。rootroot

脚本如下b_reb

#!/bin/bash
# Installing updates and other software
echo "Creating systemd unit file..."
cat << EOF > /usr/lib/systemd/system/a_reb.service
[Unit]
Description="Basic setup"

[Service]
WorkingDirectory=$(pwd)
Type=forking
ExecStart=/bin/bash $(pwd)/a_reb
KillMode=process

[Install]
WantedBy=multi-user.target
EOF
echo "Enabling a_reb at startup..."
systemctl enable a_reb.service
reboot now

因此服务器重新启动并且 root 登录。现在在同一个会话中,a_reb应该通过启动来执行a_reb.service。我还没有做a_reb,但它的内容无关紧要。

例如:一旦root登录,a_reb就会执行并输出一个提示让root回答。

我希望我能解释清楚。我也愿意接受其他方法。主要想法是执行b_reb某些操作然后重新启动,然后a_reb在重新启动后 root 登录后立即运行。

[更新]

b-reb在系统上安装更新和所需的软件包。之后它将avahi-daemon主机名更改为.alocal。然后服务器需要重新启动。

a_reb配置已安装的软件并加入域。域加入如下所示:

# Get adm-user for domain-join
read -p 'adm username for domain-join: ' ADM
echo "Continuing as $ADM..."
realm join MYDOMAIN.LOCAL –U $ADM

这就是为什么我需要以 root 身份运行脚本(我不想使用 sudo)。我们有 4 个人将使用这个,我们每个人都有自己的 adm-user。realm将提示输入用户密码,所以这不是必需的。

答案1

你的任务是:

  • b-reb 在系统上安装更新和所需的软件包。之后,它将 avahi-daemon 主机名更改为 .alocal。然后服务器需要重新启动。

  • a_reb 配置已安装的软件并加入域。

如果您要使这一过程复杂化,我建议使用 Ansible、Puppet 或 Chef 进行真正的配置管理 — — 事实上,您注意到您计划在将来实现这一自动化。所以

将其变成一项服务是不必要的复杂化。而且您尝试对a_reb服务从控制台读取的位置执行的操作是错误的。只需将您的两个 shell 脚本放入/usr/sbin并指示您的四个用户在程序(从您的描述中我不太清楚这一点)指示时运行它们即可。

相关内容