Vu4ll/project-manager

A background project manager for Debian and Debian-based Linux distributions. This tool automatically manages and runs multiple projects in persistent screen sessions using systemd for service management

★ 5Forks 1ShellGitHub ↗Compare
debianprojectproject-managementscreensystemdubuntu

README

Project Manager / Proje Yöneticisi

📖 English Version • 📖 Türkçe Versiyon


📖 English

A lightweight, robust, thread-safe, and highly customizable process supervisor and manager written in pure Bash. It allows you to run, monitor, stop, and restart any native application background processes (like Node.js, Python, Go, Java, or binary executables) on Linux systems safely.

Features

  • Process Supervision: Daemonizes and manages background processes using standard Linux tools (setsid, sudo, kill).
  • Thread-Safety: Requires advisory file locks (flock) to prevent race conditions during concurrent operations.
  • Security Protections: Validates process names, limits users, and enforces path boundaries during file deletions to prevent arbitrary directory removal.
  • Configurability: All paths (configs, PIDs, logs, workspace directories) are configurable via environment variables or fall back to standard defaults.
  • Centralized Logs: Centralizes management logs and maps stdout/stderr of supervised processes to separate log files.

Directory Structure

By default, the script works with the following hierarchy:

  • Config File: /etc/project-manager/projects.conf (Format: name|path|command|run_user)
  • PIDs: /run/project-manager/
  • Logs: /var/log/project-manager/
  • Projects Base Dirs: /opt/project-manager/projects/ (can be configured via PROJECT_MANAGER_PROJECTS_DIR)

Environment Variables

You can customize the script's behavior using the following environment variables:

Variable Description Default
PROJECT_MANAGER_CONFIG Path to the projects INI-like database /etc/project-manager/projects.conf
PROJECT_MANAGER_RUN_DIR Directory where .pid files are stored /run/project-manager
PROJECT_MANAGER_LOG_DIR Directory where application logs are stored /var/log/project-manager
PROJECT_MANAGER_LOG_FILE Central activity log file for the manager /var/log/project-manager.log
PROJECT_MANAGER_PROJECTS_DIR Boundary directory allowed for automated deletion /opt/project-manager/projects

Note: flock must be available on the system. If it is missing, start, stop, restart, and delete fail with a clear error instead of running without mutual exclusion.

Usage

# Start a specific project or all projects
project-manager.sh start [project_name]

# Stop a project or all projects
project-manager.sh stop [project_name]

# Restart a project or all projects
project-manager.sh restart [project_name]

# Check running status and PIDs
project-manager.sh status [project_name]

# Unregister a project and safely remove its workspace if it is under the configured projects base directory
project-manager.sh delete project_name

# Recursively remove a path, but only after resolving it inside PROJECTS_BASE_DIR
project-manager.sh clean-path /absolute/path

clean-path accepts an absolute path and resolves symlinks before deleting. The resolved target must stay within PROJECT_MANAGER_PROJECTS_DIR, and the base directory itself is rejected.


📖 Türkçe

Saf Bash ile yazılmış, hafif, sağlam, iplik güvenli (thread-safe) ve yüksek derecede özelleştirilebilir bir süreç (process) denetleyici ve yöneticisidir. Linux sistemlerinde Node.js, Python, Go, Java veya derlenmiş ikili dosyalar (binary) gibi herhangi bir yerel uygulamanın arka plan süreçlerini güvenle çalıştırmanızı, izlemenizi, durdurmanızı ve yeniden başlatmanızı sağlar.

Özellikler

  • Süreç Denetimi: Standart Linux araçlarını (setsid, sudo, kill) kullanarak arka plan süreçlerini bağımsız servisler (daemon) gibi yönetir.
  • İplik Güvenliği (Thread-Safety): Eşzamanlı işlemlerde çakışmaları (race conditions) önlemek için zorunlu dosya kilitlerini (flock) kullanır.
  • Güvenlik Korumaları: Rastgele dizin silinmesini önlemek amacıyla süreç adlarını doğrular, kullanıcı sınırları getirir ve dizin sınırlarını zorunlu tutar.
  • Özelleştirilebilirlik: Tüm yollar (yapılandırmalar, PID'ler, loglar, çalışma alanları) ortam değişkenleri ile değiştirilebilir veya varsayılan ayarlara geri döner.
  • Merkezi Günlükler (Logs): Yönetici hareketlerini günlüğe kaydeder ve izlenen süreçlerin çıktılarını (stdout/stderr) bağımsız log dosyalarına yönlendirir.

Dizin Yapısı

Varsayılan olarak, betik şu hiyerarşiyle çalışır:

  • Yapılandırma Dosyası: /etc/project-manager/projects.conf (Format: ad|yol|komut|calistiran_kullanici)
  • PID Dosyaları: /run/project-manager/
  • Uygulama Logları: /var/log/project-manager/
  • Ana Proje Dizinleri: /opt/project-manager/projects/ (PROJECT_MANAGER_PROJECTS_DIR ile yapılandırılabilir)

Ortam Değişkenleri

Betiğin davranışını aşağıdaki ortam değişkenleriyle özelleştirebilirsiniz:

Değişken Açıklama Varsayılan
PROJECT_MANAGER_CONFIG Proje yapılandırma veritabanının yolu /etc/project-manager/projects.conf
PROJECT_MANAGER_RUN_DIR .pid dosyalarının saklandığı dizin /run/project-manager
PROJECT_MANAGER_LOG_DIR Uygulama loglarının saklandığı dizin /var/log/project-manager
PROJECT_MANAGER_LOG_FILE Yöneticinin merkezi etkinlik log dosyası /var/log/project-manager.log
PROJECT_MANAGER_PROJECTS_DIR Otomatik silme izni olan güvenli sınır dizini /opt/project-manager/projects

Kullanım

# Belirli bir projeyi veya tüm projeleri başlatır
project-manager.sh start [proje_adi]

# Belirli bir projeyi veya tüm projeleri durdurur
project-manager.sh stop [proje_adi]

# Belirli bir projeyi veya tüm projeleri yeniden başlatır
project-manager.sh restart [proje_adi]

# Çalışma durumlarını ve PID'leri kontrol eder
project-manager.sh status [proje_adi]

# Projeyi kayıttan çıkarır ve yapılandırılmış güvenli sınır içindeyse fiziksel dizinini de siler
project-manager.sh delete proje_adi

# Bir yolu özyineli olarak siler; ancak yalnızca PROJECTS_BASE_DIR altında çözülürse
project-manager.sh clean-path /mutlak/yol

clean-path, mutlak bir yol alır ve silmeden önce symlink'leri çözer. Çözümlenen hedef PROJECT_MANAGER_PROJECTS_DIR içinde kalmalıdır; base dizinin kendisi reddedilir.

Contributors

Vu4ll

Issues