当用户登录时使用 systemd 启动脚本

当用户登录时使用 systemd 启动脚本

我尝试在用户登录时使用 systemd 启动一个脚本。然而,到目前为止,它还没有按我想要的方式工作。我做了以下事情:

我将以下服务放在/etc/systemd/system/loginNordVPN.service

[Unit]
After=network.service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/autologinNordVPN

[Install]
WantedBy=default.target

该脚本/usr/local/bin/autologinNordVPN的内容如下:

#!/usr/bin/expect
# Script for automatic login at nordvpn
set timeout 10
set username "myusername\r"
set credentialpass "mypassword\r"

spawn nordvpn login
expect "Email / Username: "
send "$username"
expect "Password: "
send "$credentialpass"

interact

/usr/local/bin/autologinNordVPN如果我以./autologinNordVPN(独立,无论我以普通用户身份启动它还是以具有 sudoers 权限的用户身份启动它)的方式启动它,脚本都会起作用。

启动机器并以具有 sudoers 权限的用户身份登录后,我可以连接到 NordVPN - 上述服务执行了脚本。到此为止一切正常。

如果我以没有 sudoer 权限的“普通”用户身份登录,则无法连接到 NordVPN - 因此出了问题。因此,我尝试将上述服务添加到用户 systemd。我将 loginNordVPN.service 复制到,~/.local/share/systemd/user/然后使用 启动了该服务systemctl --user enable loginNordVPN.service。(我之前也从系统范围的 systemd 中删除了该服务。)

重启并登录后,似乎脚本并未完全执行。

如果我查看日志,journalctl --user | grep "nordv"我可以看到,该服务已启动,但无论出于什么原因,它都不起作用:

journalctl --user | grep "nordv"
Dez 13 15:04:03 MYSYSTEM systemd[3497]: Started Login current user to nordvpn.
Dez 13 15:04:03 MYSYSTEM autologinNordVPN[3503]: spawn nordvpn login

我尝试通过以下方式更改用户服务,但没有效果:

[Unit]
Description=Login current user to nordvpn

[Service]
StandardOutput=journal
ExecStart=/usr/local/bin/autologinNordVPN

[Install]
WantedBy=default.target

并且这个尝试不起作用:

[Unit]
Description=Login current user to nordvpn

[Service]
Type=oneshot
RemainAfterExit=true
StandardOutput=journal
ExecStart=/usr/local/bin/autologinNordVPN

[Install]
WantedBy=default.target

我必须做什么才能让我的脚本服务为任何用户服务?

谢谢!

答案1

您的单元文件可能需要依赖于nordvpnd,该守护进程似乎实际连接到 NordVPN 网络并配置 VPN 接口。

诸如单元文件部分Requires=nordvpn.service中的一行应该可以完成此操作。[Unit]

如果你定义/etc/systemd/system/loginNordVPN.service为:会发生什么情况?

[Unit]
Description=NordVPN Auto Login
After=network.service
After=network-online.target
Requires=nordvpn.service

[Service]
ExecStart=/usr/local/bin/autologinNordVPN

[Install]
WantedBy=default.target

systemctl enable nordvpnd

答案2

我不知道为什么,但是现在这个有效了- ~/.local/share/systemd/user/loginNordVPN.service

[Unit]
Description=Login current user to nordvpn
After=network.service
After=network-online.target
#Requires=nordvpnd.service

[Service]
#StandardOutput=journal
ExecStart=/usr/local/bin/autologinNordVPN
#TimeoutSec=10

[Install]
WantedBy=default.target

当然,我启用并启动了该服务。

相关内容