如何在启动时以 root 权限启动脚本?

如何在启动时以 root 权限启动脚本?

我尝试使用 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

您在这里有两个选择:

  1. 将配置文件移动到工具期望找到它的位置,或者
  2. 告诉工具在哪里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 变量的一部分...这解释了您遇到的错误。

相关内容