crontab 无法运行我的脚本

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

通过 运行的作业cronsystemd启动脚本不会在与桌面相同的运行时环境中运行。systemd启动脚本以 运行root。您的任何PATH更改或其他环境变量设置都不会自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(阅读man xhost)。

cron人们可以在crontab文件 Read中为所有作业设置环境变量man 5 crontab

echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

由于command该行的一部分crontab默认由 解释/bin/sh,其语法比 更简单/bin/bash,因此我建议command调用一个bash脚本(可执行、已安装、以 开头#!/bin/bash)来设置环境,然后调用所需的程序。

答案2

谢谢,Steeldrive:-) 我想,一旦你开始使用 GUI,你就不得不坚持使用它。你的建议非常有效。

@Sturmkater 这听起来像是你应该通过用户的启动应用程序而不是通过 cron 来做的事情。例如如何在登录时自动启动应用程序?– 钢铁司机

相关内容