Crontab显然没有打电话给sudo

时间:2014-01-31 17:19:56

标签: bash ubuntu-12.04 crontab sudo openvpn

tl; dr需要SUDO的bash脚本在手动调用时工作正常,但在crontab调用时不起作用,即使它是使用 sudo crontab -e

我正在尝试自动连接到我的vpn代理,以便在午夜开启vpn连接,并在上午7:15关闭。 为了实现自动化,我编写了以下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作为参数)或关闭(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$

我将此脚本添加到cron,使用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地址仍在使用中。我唯一的猜测是,某人的cron工作没有被sudo权限调用,但我无法理解为什么。

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

由于 德克兰

2 个答案:

答案 0 :(得分:0)

在我的crontab中添加了以下内容,现在一切正常。

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

答案 1 :(得分:-2)

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

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

它应该有用。