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权限调用,但我无法理解为什么。
任何帮助将不胜感激。我也对任何关于替代方法,不同脚本等的建议持开放态度......
由于 德克兰
答案 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
它应该有用。