不知何故,Linux 新手,过去曾使用过它,尽管不像现在那么广泛。
我在这里想要实现的是在计算机启动后立即启动 openvpn 服务。我已经部分实现了这一点。我有几个配置为连接到不同国家/地区的 .ovpn 文件。我首先创建了一个脚本,询问我想要连接到哪个国家/地区,然后进行连接。
现在我想做的是使其自动执行,以便每次启动用户时,我希望该服务提示我输入,然后运行它。这里的问题是我无法强制该服务提示我输入。
重击代码:
#!/bin/bash
echo Which server do you want to connect
read -p 'Server(pt, se, nl, es, no, is, ch, de, ca, au, at): ' server
echo "You selected " $server
sudo openvpn /opt/ProtonVPN/$server.protonvpn.com.udp.ovpn
这段代码本身就很好用。
为了创建服务,我遵循了以下文章:如何为 shell 脚本创建服务,以便可以像守护进程一样启动和停止它?
所以我的服务文件如下所示:
[Unit]
Description=Connect to ProtonVPN
[Service]
Type=simple
ExecStart=/home/{user}/bin/proton-run.sh
然后我用以下命令重新启动了守护进程:systemctl daemon-reload
我尝试使用以下命令运行服务:sudo systemctl start proton-run.service
,但我从未收到输入提示,因此脚本崩溃,附有屏幕截图:
有什么帮助吗?我已阅读有关 systemd-ask-password 的内容,但我认为这不是我所需要的。
答案1
你想做的事情是不可能的。
当您输入“sudo systemctl start proton-run.service”时,您的脚本将使用单独的进程启动到其自己的 shell 中。该提示永远不会出现在您的 shell 中。
可能的解决方案是向 systemctl 提供参数,并将其传递给底层脚本。
以下是一些关于如何做到这一点的想法:https://superuser.com/questions/728951/systemd-giving-my-service-multiple-arguments