Created
December 6, 2024 19:30
-
-
Save Jipok/5d17b18d107358c7273055607d409de3 to your computer and use it in GitHub Desktop.
Automaticly create tmux service for runit for each linux user
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
USERS_DIR="/home" | |
SERVICES_DIR="/etc/sv" | |
RUNIT_DIR="/var/service" | |
create_tmux_service() { | |
user="$1" | |
service_name="tmux-${user}" | |
service_dir="${SERVICES_DIR}/${service_name}" | |
# Проверяем, существует ли уже сервис | |
[ -d "$service_dir" ] && return | |
# Создаем директорию сервиса | |
mkdir -p "$service_dir" | |
# Создаем run-скрипт | |
cat > "$service_dir/run" <<EOF | |
#!/bin/sh | |
su - ${user} -c "tmuxp load -d tmuxp.yaml" | |
exec su - ${user} -c sh -c 'while tmux has-session -t 0; do sleep 7s; done' | |
EOF | |
chmod 755 "$service_dir/run" | |
# Активируем сервис | |
ln -s "$service_dir" "$RUNIT_DIR/" | |
echo "NEW $1" | |
} | |
remove_tmux_service() { | |
user="$1" | |
echo "DEL $1" | |
service_name="tmux-${user}" | |
# Останавливаем сервис если он запущен | |
[ -L "${RUNIT_DIR}/${service_name}" ] && sv down "${service_name}" | |
# Удаляем символическую ссылку | |
rm -f "${RUNIT_DIR}/${service_name}" | |
# Удаляем директорию сервиса | |
rm -rf "${SERVICES_DIR}/${service_name}" | |
} | |
# Удаляем сервисы несуществующих пользователей | |
for service in ${SERVICES_DIR}/tmux-*; do | |
[ -d "$service" ] || continue | |
user=${service#${SERVICES_DIR}/tmux-} | |
[ -d "${USERS_DIR}/${user}" ] || remove_tmux_service "$user" | |
done | |
# Создаем сервисы для существующих пользователей | |
for user_dir in ${USERS_DIR}/*; do | |
[ -d "$user_dir" ] || continue | |
user=$(basename "$user_dir") | |
create_tmux_service "$user" | |
done | |
# Мониторим изменения в директории с помощью inotifywait | |
inotifywait -m --format '%f' -e create,delete -e isdir "${USERS_DIR}" | | |
while read -r user; do | |
if [ -d "${USERS_DIR}/${user}" ]; then | |
# Директория создана | |
create_tmux_service "$user" | |
else | |
# Директория удалена | |
remove_tmux_service "$user" | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment