Skip to content

Commit 19d79e7

Browse files
committed
fix(systemd): ensure systemd service file is created before starting
closes #262 - add precheck to all systemd commands to determine whether or not systemd is set up before running
1 parent 5e65b50 commit 19d79e7

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

extensions/systemd/systemd.js

+33
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22

3+
const fs = require('fs');
34
const execa = require('execa');
45
const cli = require('../../lib');
56

@@ -9,16 +10,34 @@ class SystemdProcessManager extends cli.ProcessManager {
910
}
1011

1112
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+
1219
return this.ui.sudo(`systemctl start ${this.systemdName}`)
1320
.catch((error) => Promise.reject(new cli.errors.ProcessError(error)));
1421
}
1522

1623
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+
1730
return this.ui.sudo(`systemctl stop ${this.systemdName}`)
1831
.catch((error) => Promise.reject(new cli.errors.ProcessError(error)));
1932
}
2033

2134
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+
2241
return this.ui.sudo(`systemctl restart ${this.systemdName}`)
2342
.catch((error) => Promise.reject(new cli.errors.ProcessError(error)));
2443
}
@@ -61,6 +80,20 @@ class SystemdProcessManager extends cli.ProcessManager {
6180
}
6281
}
6382

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+
6497
static willRun() {
6598
try {
6699
execa.shellSync('which systemctl', {stdio: 'ignore'});

0 commit comments

Comments
 (0)