blob: b88cdb0695f78782ae734e061a6cec0fc787656d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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)
|