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
它应该起作用。