首页 > 解决方案 > Openwrt 脚本 - 自动启动 Shadowsocks

问题描述

我想为 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

标签: openwrt

解决方案


您可以使用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 脚本执行。因此,只需编辑 /etc/rc.local 并sh /path/to/your/script.sh确保您的脚本是可执行的并正确执行您的任务。


推荐阅读