1
1
'use strict' ;
2
2
3
+ const fs = require ( 'fs' ) ;
3
4
const execa = require ( 'execa' ) ;
4
5
const cli = require ( '../../lib' ) ;
5
6
@@ -9,16 +10,34 @@ class SystemdProcessManager extends cli.ProcessManager {
9
10
}
10
11
11
12
start ( ) {
13
+ if ( ! this . _precheck ( ) ) {
14
+ return Promise . reject (
15
+ new cli . errors . SystemError ( 'Systemd process manager has not been set up. Run `ghost setup systemd` and try again.' )
16
+ ) ;
17
+ }
18
+
12
19
return this . ui . sudo ( `systemctl start ${ this . systemdName } ` )
13
20
. catch ( ( error ) => Promise . reject ( new cli . errors . ProcessError ( error ) ) ) ;
14
21
}
15
22
16
23
stop ( ) {
24
+ if ( ! this . _precheck ( ) ) {
25
+ return Promise . reject (
26
+ new cli . errors . SystemError ( 'Systemd process manager has not been set up. Run `ghost setup systemd` and try again.' )
27
+ ) ;
28
+ }
29
+
17
30
return this . ui . sudo ( `systemctl stop ${ this . systemdName } ` )
18
31
. catch ( ( error ) => Promise . reject ( new cli . errors . ProcessError ( error ) ) ) ;
19
32
}
20
33
21
34
restart ( ) {
35
+ if ( ! this . _precheck ( ) ) {
36
+ return Promise . reject (
37
+ new cli . errors . SystemError ( 'Systemd process manager has not been set up. Run `ghost setup systemd` and try again.' )
38
+ ) ;
39
+ }
40
+
22
41
return this . ui . sudo ( `systemctl restart ${ this . systemdName } ` )
23
42
. catch ( ( error ) => Promise . reject ( new cli . errors . ProcessError ( error ) ) ) ;
24
43
}
@@ -61,6 +80,20 @@ class SystemdProcessManager extends cli.ProcessManager {
61
80
}
62
81
}
63
82
83
+ _precheck ( ) {
84
+ if ( this . instance . cliConfig . get ( 'extension.systemd' , false ) ) {
85
+ return true ;
86
+ }
87
+
88
+ // service file exists but for some reason the right property in cliConfig hasn't been set
89
+ if ( fs . existsSync ( `/lib/systemd/system/${ this . systemdName } .service` ) ) {
90
+ this . instance . cliConfig . set ( 'extension.systemd' , true ) ;
91
+ return true ;
92
+ }
93
+
94
+ return false ;
95
+ }
96
+
64
97
static willRun ( ) {
65
98
try {
66
99
execa . shellSync ( 'which systemctl' , { stdio : 'ignore' } ) ;
0 commit comments