시작 시 루트 권한으로 스크립트를 시작하려면 어떻게 해야 합니까?

시작 시 루트 권한으로 스크립트를 시작하려면 어떻게 해야 합니까?

나는 성공하지 못한 채 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

시스템 로그 크론:

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!

루트가 아닌 경우 동일한 오류가 발생합니다. 분명히 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은 sudo... 또는 이와 유사한 것을 사용하는 대신 스크립트를 루트로 실행해야 합니다. 스크립트는 실행 중인 사용자로부터 파일을 가져옵니다.

이 문제를 해결하는 방법을 모르겠습니다!

답변1

귀하의 ghoststart.sh스크립트(또는 그 안에 있는 내용)가 실행 파일을 호출하여 OpenVPN을 시작하려고 cyberghostvpn합니다 . 스크립트에서 실행 파일을 찾을 수 없습니다 openvpn. 실행 파일의 경로를 찾으려면 $PATH터미널에서 사용하세요 .command -v openvpn

openvpn실행 파일이 에 있는 경우 /usr/sbincrontab 일정을 다음과 같이 작성할 수 있습니다.

@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 "(내보내기 PATH=/usr/bin:/bin;/home/pat/Documents/cyberghost/ghoststart.sh

openvpn 바이너리는 어디에 있나요? 내 데비안에서는 /usr/sbin스크립트에 전달하는 PATH 변수의 일부 가 아닙니다 . 이는 발생하는 오류를 설명합니다.

관련 정보