📖 English Version • 📖 Türkçe Versiyon
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.
- 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.
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 viaPROJECT_MANAGER_PROJECTS_DIR)
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.
# 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/pathclean-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.
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.
- 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.
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_DIRile yapılandırılabilir)
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 |
# 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/yolclean-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.