crontab не запускает мой скрипт

Я пытался запустить сценарий при запуске , но не удается. crontab

@reboot /bin/sleep 8s && /bin/bash /home/user/reconnect.sh > /home/user/reconnect.log 2>&1

Скрипт работает нормально, если я выполняю его вручную.

#!/bin/bash

# If started as root, then re-start as user "user":
if [ "$(id -u)" -eq 0 ]; then
    exec sudo -H -u user $0 "$@"
    echo "This is never reached.";
fi
echo "This runs as user $(id -un)";

while [ "true" ]
do
        VPNCON=$(/bin/nmcli con | /bin/grep PureVPN_PPTP | /bin/cut -f18 -d " ")
        if [[ $VPNCON != ens3 ]]; then
                /bin/echo "Disconnected, trying to reconnect..."
                (/bin/sleep 1s && /bin/nmcli con up uuid 1dfcb9f6-1b90-3d92-9f8b-106dc35da0f4)
        elif    IP=$(ifconfig ppp0 | awk '/inet/{print $2; exit}')
                (/bin/sleep 5s)
                [ "$IP" != "xxx.xxxx.xxx.xxx" ]; then
                /bin/echo "wrong IP: $IP"
                (/bin/sleep 1s && /bin/nmcli con down uuid 1dfcb9f6-1b90-3d92-9f8b-106dc35da0f4 && /bin/sleep 2s && /bin/nmcli con up uuid 1dfcb9f6-1b90-3d92-9f8b-106dc35da0f4)
        else
                /bin/echo "Already connected !"
        fi
        /bin/sleep 30
done

С момента первого поста я немного поработал над сценарием. Работает нормально, выполняется вручную.

Выполняется crone как пользователь. Я получаю следующую ошибку:

This runs as user user
Disconnected, trying to reconnect...
Error: Connection activation failed: Not authorized to control networking.

Каким-то образом пользователь с cron не имеет тех же прав, что и сам. Проблема в том, что при запуске от имени root он также не работает. Учетные данные для vpn хранятся в связке ключей пользователей, поэтому root не может установить соединение: - /

1
задан 18 July 2021 в 23:38

2 ответа

Спасибо, Steeldrive :-) Думаю, если вы начнете с графического интерфейса, вы будете вынуждены его придерживаться. Ваше предложение работает как шарм.

@Sturmkater: похоже, что вам следует делать это через запускаемые приложения пользователя , а не через cron. См., Например, Как мне автоматически запускать приложения при входе в систему? - steeldriver

0
ответ дан 28 July 2021 в 11:18

Вакансии запускаемые через cron или systemd сценарии запуска не запускаются в той же среде выполнения, что и на вашем рабочем столе. Сценарии запуска systemd запускаются от имени root . Ни одно из изменений вашего PATH или других настроек переменных среды не распространяется автоматически на ваше задание cron . Например, нет $ DISPLAY , поэтому программы с графическим интерфейсом требуют особого обращения (прочтите man xhost ).

Можно установить переменные среды для всех своих cron заданий в файле crontab Прочитать man 5 crontab .

Посмотрите на результаты echo "=== id ==="; id; echo "=== set ==="; set; echo "=== env ==="; env | sort; echo "=== alias ==="; alias в каждой из ваших сред.

Поскольку часть команды в строке crontab по умолчанию интерпретируется как / bin / sh , который имеет более простой синтаксис, чем / bin / bash , я рекомендую, чтобы команда была вызовом bash скрипта (исполняемого, смонтированного,начинается с #! / bin / bash ), который устанавливает среду, а затем вызывает нужную программу.

1
ответ дан 28 July 2021 в 11:18

Другие вопросы по тегам:

Похожие вопросы: