(use-modules (shepherd service) (shepherd system) (srfi srfi-1) (srfi srfi-26) (ice-9 ftw) (ice-9 exceptions)) (define %shepherd-service-directory "/etc/shepherd/services") (define %shepherd-enabled-directory "/etc/shepherd/enabled") (define (scm-file? file) (string-suffix? ".scm" file)) (define (service-file-name file) (string-append %shepherd-service-directory "/" file)) (define (enabled-service-name file) (let ((name (basename file))) (if (string-suffix? ".scm" name) (substring name 0 (- (string-length name) 4)) name))) (define (load-service-file file) (let ((path (service-file-name file))) (catch #t (lambda () (format #t "Loading Shepherd service: ~a~%" path) (load path)) (lambda args (format (current-error-port) "Shepherd: failed to load service file ~a~%" path) (format (current-error-port) "Shepherd error: ~s~%" args))))) (define (load-service-directory) (when (file-exists? %shepherd-service-directory) (for-each load-service-file (sort (filter scm-file? (scandir %shepherd-service-directory)) stringsymbol name))) (format #t "Starting enabled Shepherd service: ~a~%" name) (start-service (lookup-service (string->symbol name)))))) (sort (filter (lambda (file) (and (not (string=? file ".")) (not (string=? file "..")))) (scandir %shepherd-enabled-directory)) string