как запустить скрипт с правами 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

3-я правка:

Если я это сделаю, то не возникнет никакой ошибки.

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

Ваша "3-я правка" также указывает, что инструмент ищет файл конфигурации в домашнем каталоге пользователя, запустившего инструмент. Вы говорите, что у вас есть этот файл в домашнем каталоге , 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, которую вы передали вашему скрипту... что объясняет возникшую ошибку.

Связанный контент