first commit

This commit is contained in:
hdvt
2026-03-28 16:48:16 +00:00
commit 0c097ebf97
15478 changed files with 850272 additions and 0 deletions

View File

@@ -0,0 +1,151 @@
function servicectl --description "Manage s6 services (systemd-style wrapper)"
# --- CONFIGURATION ---
# Папка, где лежат оригиналы скриптов сервисов
set -l SV_DIR /etc/s6/sv
# "Живая" папка, которую сканирует s6 прямо сейчас (обычно в tmpfs/RAM)
set -l SCAN_DIR /run/service
# ПАПКА ДЛЯ АВТОЗАГРУЗКИ (Persistent).
# Сюда ставятся симлинки, чтобы сервис запускался после ребута.
# В Void Linux это /var/service, в других может быть /etc/s6/enabled
set -l PERM_DIR /var/service
# Пути для поиска логов
set -l LOG_SEARCH_PATHS /var/log /var/log/s6
# ---------------------
set -l cmd $argv[1]
set -l service $argv[2]
if test -z "$cmd"
echo "Usage: servicectl <start|stop|restart|status|enable|disable|activate> <service_name>"
return 1
end
switch $cmd
# --- УПРАВЛЕНИЕ СОСТОЯНИЕМ (ВКЛ/ВЫКЛ) ---
case activate
# Просто линкуем в SCAN_DIR (работает до перезагрузки)
if not test -d $SV_DIR/$service
echo "Error: Service '$service' does not exist in $SV_DIR."
return 1
end
if test -L $SCAN_DIR/$service; or test -d $SCAN_DIR/$service
echo "Service '$service' is already active (linked in runtime)."
else
sudo ln -s $SV_DIR/$service $SCAN_DIR/$service
echo "Service '$service' activated (runtime link created)."
# Обычно s6 сам запускает сервис при появлении линка, но можно ускорить
sudo s6-svscanctl -a $SCAN_DIR
end
case enable
# Линкуем в PERM_DIR (для ребута) + активируем в рантайме
if not test -d $SV_DIR/$service
echo "Error: Service '$service' does not exist in $SV_DIR."
return 1
end
# 1. Создаем постоянный линк
if test -L $PERM_DIR/$service; or test -d $PERM_DIR/$service
echo "Service '$service' is already enabled for boot."
else
sudo ln -s $SV_DIR/$service $PERM_DIR/$service
echo "Service '$service' enabled (boot link created in $PERM_DIR)."
end
# 2. Активируем прямо сейчас (если еще нет)
if not test -d $SCAN_DIR/$service
sudo ln -s $SV_DIR/$service $SCAN_DIR/$service
sudo s6-svscanctl -a $SCAN_DIR
echo "Service '$service' activated for current session."
end
case disable
# Удаляем отовсюду
# 1. Останавливаем и удаляем из runtime
if test -d $SCAN_DIR/$service
sudo s6-svc -d $SCAN_DIR/$service # Send Down signal
sudo rm $SCAN_DIR/$service # Remove runtime link
echo "Service '$service' deactivated (runtime link removed)."
else
echo "Service '$service' was not active in runtime."
end
# 2. Удаляем из автозагрузки
if test -L $PERM_DIR/$service; or test -d $PERM_DIR/$service
sudo rm $PERM_DIR/$service
echo "Service '$service' disabled (boot link removed)."
end
# --- УПРАВЛЕНИЕ ПРОЦЕССОМ (UP/DOWN) ---
case start
if not test -d $SCAN_DIR/$service
echo "Error: Service '$service' is not active (not linked in $SCAN_DIR)."
echo "Hint: Run 'servicectl activate $service' or 'servicectl enable $service' first."
return 1
end
sudo s6-svc -u $SCAN_DIR/$service
echo "Service '$service' started (up signal sent)."
case stop
if not test -d $SCAN_DIR/$service
echo "Error: Service '$service' is not active."
return 1
end
sudo s6-svc -d $SCAN_DIR/$service
echo "Service '$service' stopped (down signal sent)."
case restart
if not test -d $SCAN_DIR/$service
echo "Error: Service '$service' is not active."
return 1
end
sudo s6-svc -r $SCAN_DIR/$service
echo "Service '$service' restarted."
case status
if test -d $SCAN_DIR/$service
echo "--- Service Status ($service) ---"
sudo s6-svstat $SCAN_DIR/$service
if test -d $SCAN_DIR/$service/log
echo "--- Logger Status ---"
sudo s6-svstat $SCAN_DIR/$service/log
end
set -l found_log 0
for path in $LOG_SEARCH_PATHS
if test -f "$path/$service/current"
echo ""
echo "--- Last 10 log lines ---"
# Попытка сконвертировать TAI64N время, если есть утилита
if type -q s6-tai64nlocal
sudo tail -n 10 "$path/$service/current" | s6-tai64nlocal
else
sudo tail -n 10 "$path/$service/current"
end
set found_log 1
break
end
end
else
echo "Status: Service '$service' is INACTIVE (not linked)."
if test -L $PERM_DIR/$service
echo " (But it IS enabled for boot in $PERM_DIR)"
else
echo " (Not enabled for boot)"
end
end
case '*'
echo "Unknown command: $cmd"
echo "Available: start, stop, restart, status, enable, disable, activate"
return 1
end
end