🌈 Sync 2026-04-08 22:17:33

This commit is contained in:
github-actions[bot] committed 2026-04-08 22:17:33 +08:00
1 parent babac663b9
commit 5fb3abba3a
23 files changed
+1227 -868

No files matched your search

+1 -1
View File
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=nikki
PKG_VERSION:=2026.04.08
PKG_RELEASE:=10
PKG_RELEASE:=11
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+5 -1
View File
@@ -6,7 +6,7 @@ config config 'config'
option 'profile' 'subscription:subscription'
option 'start_delay' '0'
option 'scheduled_restart' '0'
option 'cron_expression' '0 3 * * *'
option 'scheduled_restart_cron' '0 3 * * *'
option 'test_profile' '1'
option 'core_only' '0'
@@ -234,3 +234,7 @@ config routing 'routing'
config editor 'editor'
config log 'log'
option 'scheduled_clear' '1'
option 'scheduled_clear_cron' '*/5 * * * *'
option 'scheduled_clear_size_limit' '1'
option 'scheduled_clear_size_limit_unit' 'MB'
+53 -6
View File
@@ -9,6 +9,7 @@ PROG="/usr/bin/mihomo"
. "$IPKG_INSTROOT/etc/nikki/scripts/include.sh"
extra_command 'update_subscription' 'Update subscription by section id'
extra_command 'clear_logs' 'Clear logs if size exceeds the limit'
boot_func() {
# prepare files
@@ -55,9 +56,9 @@ start_service() {
fi
# get config
## app config
local scheduled_restart cron_expression profile test_profile core_only
local scheduled_restart scheduled_restart_cron profile test_profile core_only
config_get_bool scheduled_restart "config" "scheduled_restart" 0
config_get cron_expression "config" "cron_expression"
config_get scheduled_restart_cron "config" "scheduled_restart_cron"
config_get profile "config" "profile"
config_get_bool test_profile "config" "test_profile" 0
config_get_bool core_only "config" "core_only" 0
@@ -109,6 +110,10 @@ start_service() {
config_get_bool ipv6_dns_hijack "proxy" "ipv6_dns_hijack" 0
config_get tcp_mode "proxy" "tcp_mode"
config_get udp_mode "proxy" "udp_mode"
## log config
local log_scheduled_clear log_scheduled_clear_cron
config_get_bool log_scheduled_clear "log" "scheduled_clear" 0
config_get log_scheduled_clear_cron "log" "scheduled_clear_cron"
# get profile
local profile_type; profile_type=$(echo "$profile" | cut -d ':' -f 1)
local profile_id; profile_id=$(echo "$profile" | cut -d ':' -f 2)
@@ -259,9 +264,18 @@ start_service() {
procd_close_instance
# cron
if [ "$scheduled_restart" = 1 ] && [ -n "$cron_expression" ]; then
local reload_cron; reload_cron=0
if [ "$scheduled_restart" = 1 ] && [ -n "$scheduled_restart_cron" ]; then
log "App" "Set scheduled restart."
echo "$cron_expression /etc/init.d/nikki restart #nikki" >> "/etc/crontabs/root"
echo "$scheduled_restart_cron /etc/init.d/nikki restart #nikki scheduled restart" >> "/etc/crontabs/root"
reload_cron=1
fi
if [ "$log_scheduled_clear" = 1 ] && [ -n "$log_scheduled_clear_cron" ]; then
log "App" "Set log scheduled clear."
echo "$log_scheduled_clear_cron /etc/init.d/nikki clear_logs #nikki log scheduled clear" >> "/etc/crontabs/root"
reload_cron=1
fi
if [ "$reload_cron" = 1 ]; then
/etc/init.d/cron restart
fi
# set started flag
@@ -422,8 +436,6 @@ service_triggers() {
}
cleanup() {
# clear log
clear_log
# load config
config_load nikki
# get config
@@ -470,6 +482,41 @@ cleanup() {
/etc/init.d/cron restart
}
clear_logs() {
# load config
config_load nikki
# get config
## log config
local log_scheduled_clear_size_limit log_scheduled_clear_size_limit_unit
config_get log_scheduled_clear_size_limit "log" "scheduled_clear_size_limit" 1
config_get log_scheduled_clear_size_limit_unit "log" "scheduled_clear_size_limit_unit" "MB"
# prepare config
local log_scheduled_clear_size_limit_in_bytes; log_scheduled_clear_size_limit_in_bytes=0
case "$log_scheduled_clear_size_limit_unit" in
B)
log_scheduled_clear_size_limit_in_bytes=$((log_scheduled_clear_size_limit))
;;
KB)
log_scheduled_clear_size_limit_in_bytes=$((log_scheduled_clear_size_limit * 1024))
;;
MB)
log_scheduled_clear_size_limit_in_bytes=$((log_scheduled_clear_size_limit * 1024 * 1024))
;;
GB)
log_scheduled_clear_size_limit_in_bytes=$((log_scheduled_clear_size_limit * 1024 * 1024 * 1024))
;;
esac
# clear logs
if [ -f "$APP_LOG_PATH" ] && [ "$(wc -c < "$APP_LOG_PATH")" -ge "$log_scheduled_clear_size_limit_in_bytes" ]; then
echo -n > "$APP_LOG_PATH"
log "Log" "App log is cleared due to scheduled clear and exceeding size limits."
fi
if [ -f "$CORE_LOG_PATH" ] && [ "$(wc -c < "$CORE_LOG_PATH")" -ge "$log_scheduled_clear_size_limit_in_bytes" ]; then
echo -n > "$CORE_LOG_PATH"
log "Log" "Core log is cleared due to scheduled clear and exceeding size limits."
fi
}
update_subscription() {
local subscription_section; subscription_section="$1"
if [ -z "$subscription_section" ]; then
-5
View File
@@ -80,11 +80,6 @@ prepare_files() {
fi
}
clear_log() {
echo -n > "$APP_LOG_PATH"
echo -n > "$CORE_LOG_PATH"
}
log() {
echo "[$(date "+%Y-%m-%d %H:%M:%S")] [$1] $2" >> "$APP_LOG_PATH"
}
+13 -4
View File
@@ -110,7 +110,7 @@ proxy_transparent_proxy=$(uci -q get nikki.proxy.transparent_proxy); [ -n "$prox
# since v1.23.0
routing=$(uci -q get nikki.routing); [ -z "$routing" ] && {
section_routing=$(uci -q get nikki.routing); [ -z "$section_routing" ] && {
uci set nikki.routing=routing
uci set nikki.routing.tproxy_fw_mark=0x80
uci set nikki.routing.tun_fw_mark=0x81
@@ -191,7 +191,7 @@ proxy_bypass_china_mainland_ip6=$(uci -q get nikki.proxy.bypass_china_mainland_i
routing_tproxy_fw_mask=$(uci -q get nikki.routing.tproxy_fw_mask); [ -z "$routing_tproxy_fw_mask" ] && uci set nikki.routing.tproxy_fw_mask=0xFF
routing_tun_fw_mask=$(uci -q get nikki.routing.tun_fw_mask); [ -z "$routing_tun_fw_mask" ] && uci set nikki.routing.tun_fw_mask=0xFF
procd=$(uci -q get nikki.procd); [ -z "$procd" ] && {
section_procd=$(uci -q get nikki.procd); [ -z "$section_procd" ] && {
uci set nikki.procd=procd
uci set nikki.procd.fast_reload=$(uci -q get nikki.config.fast_reload)
uci set nikki.procd.env_safe_paths=$(uci -q get nikki.env.safe_paths)
@@ -205,17 +205,26 @@ procd=$(uci -q get nikki.procd); [ -z "$procd" ] && {
# since v1.25.1
dummy_device=$(uci -q get nikki.routing.dummy_device); [ -z "$dummy_device" ] && uci set nikki.routing.dummy_device=nikki-dummy
routing_dummy_device=$(uci -q get nikki.routing.dummy_device); [ -z "$routing_dummy_device" ] && uci set nikki.routing.dummy_device=nikki-dummy
# since v1.25.2
core=$(uci -q get nikki.core); [ -z "$core" ] && {
section_core=$(uci -q get nikki.core); [ -z "$section_core" ] && {
uci set nikki.core=core
uci set nikki.core.redirect_listener_name=redir-in
uci set nikki.core.tproxy_listener_name=tproxy-in
uci set nikki.core.tun_listener_name=tun-in
}
# since v1.25.3
config_scheduled_restart_cron=$(uci -q get nikki.config.scheduled_restart_cron); [ -z "$config_scheduled_restart_cron" ] && uci rename nikki.config.cron_expression="scheduled_restart_cron"
log_scheduled_clear=$(uci -q get nikki.log.scheduled_clear); [ -z "$log_scheduled_clear" ] && uci set nikki.log.scheduled_clear=1
log_scheduled_clear_cron=$(uci -q get nikki.log.scheduled_clear_cron); [ -z "$log_scheduled_clear_cron" ] && uci set nikki.log.scheduled_clear_cron="*/5 * * * *"
log_scheduled_clear_size_limit=$(uci -q get nikki.log.scheduled_clear_size_limit); [ -z "$log_scheduled_clear_size_limit" ] && uci set nikki.log.scheduled_clear_size_limit=1
log_scheduled_clear_size_limit_unit=$(uci -q get nikki.log.scheduled_clear_size_limit_unit); [ -z "$log_scheduled_clear_size_limit_unit" ] && uci set nikki.log.scheduled_clear_size_limit_unit=MB
# commit
uci commit nikki