Crate pmdaemon

Source
Expand description

§PMDaemon - Advanced Process Manager

PMDaemon - A high-performance, cross-platform process manager built in Rust with advanced capabilities. PMDaemon is designed as a general-purpose process manager with innovative features for modern application deployment and monitoring.

§Key Features

§Core Process Management

  • Process lifecycle management - Start, stop, restart, reload, delete operations
  • Clustering support - Run multiple instances with automatic load balancing
  • Auto-restart - Automatic restart on crashes with configurable limits
  • Signal handling - Graceful shutdown with SIGTERM/SIGINT and custom signals
  • Configuration persistence - Process configs saved and restored between sessions

§Advanced Monitoring

  • Real-time monitoring - CPU, memory, uptime tracking with system metrics
  • Memory limit enforcement - Automatic restart when processes exceed memory limits
  • Process health checks - Continuous monitoring with automatic failure detection
  • Log management - Separate stdout/stderr files with viewing and following

§Innovative Port Management (Beyond PM2)

  • Port range distribution - Automatically distribute consecutive ports to cluster instances
  • Auto-assignment from ranges - Find first available port in specified range
  • Built-in conflict detection - Prevent port conflicts at the process manager level
  • Runtime port overrides - Change ports during restart without modifying saved config
  • Port visibility - Display assigned ports in process listings

§Web API & Real-time Updates

  • Comprehensive REST API - Full process management via HTTP with PM2-compatible responses
  • Real-time WebSocket updates - Live process status and system metrics streaming
  • Production-ready web server - Built on Axum with CORS and security headers

§Library Usage

§Basic Process Management

use pmdaemon::{ProcessManager, ProcessConfig};
use tokio;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut manager = ProcessManager::new().await?;

    // Start a simple process
    let config = ProcessConfig::builder()
        .name("my-app")
        .script("node")
        .args(vec!["server.js"])
        .build()?;

    let process_id = manager.start(config).await?;
    println!("Started process with ID: {}", process_id);

    // List all processes
    let processes = manager.list().await?;
    for process in processes {
        println!("Process: {} ({})", process.name, process.state);
    }

    Ok(())
}

§Advanced Features - Clustering with Port Management

use pmdaemon::{ProcessManager, ProcessConfig, config::PortConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut manager = ProcessManager::new().await?;

    // Start a cluster with port range distribution
    let config = ProcessConfig::builder()
        .name("web-cluster")
        .script("node")
        .args(vec!["app.js"])
        .instances(4)
        .port(PortConfig::Range(3000, 3003)) // Ports 3000-3003
        .max_memory_restart(512 * 1024 * 1024) // 512MB limit
        .build()?;

    manager.start(config).await?;
    println!("Started 4-instance cluster on ports 3000-3003");

    Ok(())
}

§CLI Usage

# Basic process management
pmdaemon start app.js --name myapp
pmdaemon stop myapp
pmdaemon restart myapp
pmdaemon delete myapp

# Clustering with port management
pmdaemon start server.js --instances 4 --port 4000-4003
pmdaemon start worker.js --port auto:5000-5100

# Runtime port override (without modifying saved config)
pmdaemon restart myapp --port 3001

# Memory limits and monitoring
pmdaemon start app.js --max-memory 100M
pmdaemon list  # Shows ports, memory usage, CPU, etc.
pmdaemon monit # Real-time monitoring

# Web API server for remote monitoring
pmdaemon web --port 9615 --host 127.0.0.1

Re-exports§

pub use config::EcosystemConfig;
pub use config::ProcessConfig;
pub use config::ProcessConfigBuilder;
pub use error::Error;
pub use error::Result;
pub use health::HealthCheck;
pub use health::HealthCheckConfig;
pub use health::HealthCheckType;
pub use health::HealthState;
pub use health::HealthStatus;
pub use manager::ProcessManager;
pub use monitoring::MonitoringData;
pub use monitoring::SystemMetrics;
pub use process::Process;
pub use process::ProcessId;
pub use process::ProcessState;
pub use process::ProcessStatus;
pub use signals::ProcessSignal;
pub use signals::SignalHandler;

Modules§

config
Process configuration types and builders.
error
Error types for PMDaemon
health
Health check system for process monitoring and validation.
manager
Process manager implementation for lifecycle and resource management.
monitoring
Process monitoring and system metrics
process
Process management types and utilities
signals
Signal handling for graceful process management.
web
Web server for monitoring API and WebSocket support

Constants§

CONFIG_DIR
Default configuration directory name
DEFAULT_KILL_TIMEOUT
Default kill timeout in milliseconds
DEFAULT_MAX_RESTARTS
Maximum number of restart attempts
DEFAULT_MIN_UPTIME
Minimum uptime in milliseconds before considering a process stable
DEFAULT_RESTART_DELAY
Default restart delay in milliseconds
DEFAULT_WEB_PORT
Default web server port for monitoring API
LOG_DIR
Default log directory name
PID_DIR
Default PID directory name
VERSION
Version of the PMDaemon library