Openwrt脚本-自动启动Shadowsocks

时间:2018-12-16 00:29:51

标签: openwrt

我想为openwrt创建一个脚本,该脚本每天都会更改Shadowsocks服务中的某些变量。这是脚本,但我不知道每天或路由器每次重新启动时将其放置在何处或如何设法调用它。

#!/bin/sh /etc/rc.common

restart=0
for i in `uci show shadowsocks | grep alias | sed -r 's/.*\[(.*)\].*/\1/'`
do
    server=$(uci get shadowsocks.@servers[${i}].alias)
    result=$(nslookup $server)

    new_ip=$(echo "${result}" | tail -n +3 | awk -F" " '/^Address 1/{ print $3}')
    if [ -n "$new_ip" ]; then
        logger -t shadowsocks "nslookup $server -> $new_ip"
        old_ip=$(uci get shadowsocks.@servers[${i}].server)
        if [ "$old_ip" != "$new_ip" ]; then
            logger -t shadowsocks "detect $server ip address change ($old_ip -> $new_ip)"
            restart=1
            uci set shadowsocks.@servers[${i}].server=${new_ip}
        fi
    else
        logger -t shadowsocks "nslookup $server fail"
    fi
done

if [ $restart -eq 1 ]; then
    logger -t shadowsocks "restart for server ip address change"
        uci commit shadowsocks
    /etc/init.d/shadowsocks restart
fi

1 个答案:

答案 0 :(得分:0)

您可以使用cron实用程序。 Cron是类Unix计算机操作系统中的基于时间的作业调度程序。它允许在指定的时间运行作业/程序/脚本。

OpenWrt默认带有cron系统,由busybox提供。

Cron默认情况下未启用,因此您的作业将不会运行。要在Openwrt中激活cron:

/etc/init.d/cron start
/etc/init.d/cron enable

参考:https://oldwiki.archive.openwrt.org/doc/howto/cron

现在考虑您的问题,如果您想每天运行提到的脚本:

使用crontab -e命令编辑cron文件。并写在下面的行。

0 0 * * * sh /path/to/your/script.sh

此命令将在每天00:00(每天午夜)运行脚本。您可以轻松地修改以上命令以在其他时间安排您的工作。生成cron作业条目的良好参考:https://crontab.guru/

要查看crontab是否正常运行:

tail -f /var/log/syslog | grep CRON

现在要问第二个问题“ 在路由器每次重启时运行脚本”:

您可以将脚本放在 /etc/rc.local 中。每次启动时,Openwrt中的/etc/rc.d/S95done都会将该文件作为shell脚本执行。因此,只需使用sh /path/to/your/script.sh编辑/etc/rc.local,请确保您的脚本是可执行文件并正确执行任务。