我有两个脚本,第二个脚本依赖于第一个脚本:
b_reb
:
此脚本为第二个脚本创建单元文件。该服务应仅在用户登录a_reb
后启动,并应在与 相同的会话中执行。root
root
脚本如下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
并指示您的四个用户在程序(从您的描述中我不太清楚这一点)指示时运行它们即可。