![如何在启动时以 root 权限启动脚本?](https://linux22.com/image/164766/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E4%BB%A5%20root%20%E6%9D%83%E9%99%90%E5%90%AF%E5%8A%A8%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
我尝试使用 systemctl 和 crontab 但没有成功。
这是脚本:
#!/bin/bash
cyberghostvpn --country-code AU --city Brisbane --connect
权利:
-rwxr-xr-x 1 pat pat 71 nov 28 13:04 ghoststart.sh
我的 crontab 是这样运行的:sudo crontab -e
@reboot sleep 120; /home/pat/Documents/cyberghost/ghoststart.sh
我可以在终端中运行脚本没有问题:sudo sh ghoststart.sh
系统日志 cron :
Nov 28 13:17:57 mrpotato cron[679]: (CRON) INFO (pidfile fd = 3)
Nov 28 13:17:57 mrpotato cron[679]: (CRON) INFO (Running @reboot jobs)
Nov 28 13:17:59 mrpotato CRON[726]: (root) CMD (sh /home/pat/Documents/cyberghost/ghoststart.sh)
Nov 28 13:24:04 mrpotato cron[658]: (CRON) INFO (pidfile fd = 3)
Nov 28 13:24:04 mrpotato cron[658]: (CRON) INFO (Running @reboot jobs)
似乎 cron 在 13:24:04 之后停止工作,因为在那之后我做了尝试
编辑2:基于这我努力了
root@mrpotato:/var/spool/cron/crontabs# /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"
Prepare OpenVPN connection ...
Please Install "openvpn" first!
如果我不是 root,它会给我同样的错误,显然 openvpn 已安装
第三次编辑:
如果我这样做,我不会得到任何错误。
pat@mrpotato:~$ sudo /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"
但如果我这样做我会得到一个:
root@mrpotato:~# /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"
错误是:
Traceback (most recent call last):
File "cyberghostvpn.py", line 580, in <module>
File "cyberghostvpn.py", line 346, in main
File "libs/config.py", line 45, in __init__
File "libs/config.py", line 112, in readConfigFile
Exception: The config file "/home/root/.cyberghost/config.ini" does not exist!
[3845] Failed to execute script cyberghostvpn
config.ini 存在于/home/pat/.cyberghost/
cron 必须以 root 身份运行脚本,而不是使用 sudo...或类似的东西,脚本从正在运行的用户获取文件...如果这有意义的话。
我不知道如何解决这个问题!
答案1
您的ghoststart.sh
脚本(或cyberghostvpn
其中的内容)正在尝试通过调用openvpn
可执行文件来启动 OpenVPN。在$PATH
脚本中找不到此可执行文件。在终端中使用command -v openvpn
来查找可执行文件的路径。
如果您的openvpn
可执行文件位于/usr/sbin
,您可以将 crontab 计划编写为
@reboot sleep 120 && PATH="$PATH:/usr/sbin" /home/pat/Documents/cyberghost/ghoststart.sh
您的“第三次编辑”还表明该工具正在启动该工具的用户的主目录中查找配置文件。您说您的主目录中有此文件pat
,而不是 的主目录中root
。
您在这里有两个选择:
- 将配置文件移动到工具期望找到它的位置,或者
- 告诉工具在哪里
HOME
。
第二个选项可以通过修改 cron 作业来完成
@reboot sleep 120 && HOME=/home/pat PATH="$PATH:/usr/sbin" /home/pat/Documents/cyberghost/ghoststart.sh
答案2
root@mrpotato:/var/spool/cron/crontabs# /bin/sh -c "(export PATH=/usr/bin:/bin;/home/pat/Documents/cyberghost/ghoststart.sh
你的 openvpn 二进制文件位于哪里?在我的 Debian 上,它不是/usr/sbin
您传递给脚本的 PATH 变量的一部分...这解释了您遇到的错误。