crontab显然没有打电话给sudo



tl; dr bash脚本,该脚本需要sudo在手动时工作正常,但在由crontab调用时不起作用,即使使用将其添加到crontab中sudo crontab -e

我正在尝试自动化与VPN代理的连接,以便在午夜和上午7:15打开VPN连接。为了自动化它,我编写了以下bash脚本,位于 /usr/local/bin/cloak.sh

#!/bin/bash
LOG_FILE=/home/declan/log/cloak.log
LogEntry()
    {
        while read data
        do
            echo "$(date "+%Y %m %d %T") ; $data" >>$LOG_FILE 2>&1;
        done
    }
echo "---------------------" | LogEntry
if [ $1 -eq 1 ]
then
    echo "Turning Cloak On" | LogEntry 
    /etc/init.d/openvpn start proxpn.miami | LogEntry
else
    echo "Turning Cloak Off" | LogEntry
    /etc/init.d/openvpn stop | LogEntry
fi
echo "---------------------" | LogEntry
echo " " | LogEntry

我的VPN正在起作用,我已经确认脚本是可执行的,并且通过在脚本呼叫之前和之后检查我的IP地址,将VPN打开(1 as parameter)或OFF(0为参数)。

declan@mx:~/log$ wget http://ipecho.net/plain -O - -q ; echo
74.196.220.81 <<-- This is my real IP address
declan@mx:~/log$ sudo /usr/local/bin/cloak.sh 1 <<-- Turn the VPN on
declan@mx:~/log$ wget http://ipecho.net/plain -O - -q ; echo
173.0.8.33 <<-- This is my VPN IP address
declan@mx:~/log$ sudo /usr/local/bin/cloak.sh 0 <<-- Turn the VPN off
declan@mx:~/log$ wget http://ipecho.net/plain -O - -q ; echo
74.196.220.81 <<-- Back to my real IP address
declan@mx:~/log$

我使用 sudo crontab -e添加了此脚本,以确保sudo正在运行脚本,并在crontab中使用以下行

# Cloak on at midnight, off at 7:15AM
0 0 * * * /usr/local/bin/cloak.sh 1
15 7 * * * /usr/local/bin/cloak.sh 0

如果我查看日志的内容/home/declan/log/cloak.log,则表明Cron作业正在正确的时间执行。

问题是,当我在Cron作业尝试启动VPN之后检查我的IP地址时,我的真正IP地址仍在使用。我唯一的猜测是,以某种方式没有使用sudo权利来打电话,但我不明白为什么。

任何帮助将不胜感激。我也对替代方法,不同脚本等的任何建议开放...

谢谢Declan

将以下内容添加到我的crontab,现在一切都按预期工作。

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

问题是..."为什么使用sudo?"您需要一个服务重新启动,这是根操作。编辑/etc/crontab并以这样的添加行:

0 0 * * * root /usr/local/bin/cloak.sh 1
15 7 * * * root /usr/local/bin/cloak.sh 0

它应该起作用。

相关内容

  • 没有找到相关文章

最新更新