不知何故,对 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 的信息,但我认为这不是我需要的。
你想做的事情是不可能的。
当您键入 `sudo systemctl start proton-run.service' 时,您的脚本将使用单独的进程启动到它自己的 shell 中。提示永远不会出现在您的 shell 中。
可能的解决方案是向 systemctl 提供参数,该参数将传递给底层脚本。
以下是有关如何做到这一点的一些想法:https ://superuser.com/questions/728951/systemd-giving-my-service-multiple-arguments