diff options
Diffstat (limited to 'sys-apps')
| -rw-r--r-- | sys-apps/shepherd/files/shepherd.scm | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/sys-apps/shepherd/files/shepherd.scm b/sys-apps/shepherd/files/shepherd.scm new file mode 100644 index 0000000..b88cdb0 --- /dev/null +++ b/sys-apps/shepherd/files/shepherd.scm @@ -0,0 +1,85 @@ +(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)) + string<?)))) + +(define (enabled-service? name) + (let ((path (string-append %shepherd-enabled-directory "/" name))) + (or (file-exists? path) + (file-exists? + (string-append path ".scm"))))) + +(define (registered-service? name) + (catch #t + (lambda () + (lookup-service name) + #t) + (lambda _ + #f))) + +(define (start-enabled-services) + (when (file-exists? %shepherd-enabled-directory) + (for-each + (lambda (file) + (let ((name (enabled-service-name file))) + (when (and (not (string=? name "")) + (registered-service? (string->symbol 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<?)))) + +(load-service-directory) + +(start-enabled-services) |
