1

svc: add list, enable, disable abilities

This commit is contained in:
eleksir
2019-09-08 16:16:47 +03:00
parent 0ae61d23ba
commit cea7035d86

54
svc
View File

@@ -1,5 +1,11 @@
#!/usr/bin/perl
# runit sv utility ignores evironment variable SVDIR
# and unable to list services, fully relying to user this knowlege
# TODO handle root user case as system mode!
# TODO handle system mode correctly
use strict;
use warnings "all";
use JSON::PP;
@@ -30,9 +36,49 @@ if ($c->{mode} eq 'user') {
chdir $c->{dir};
}
help unless (defined($ARGV[0]) || defined($ARGV[1]));
unless(defined($ARGV[0])) {
help;
} else {
if ($ARGV[0] ne 'list') {
help unless (defined($ARGV[1]));
}
}
if ((-l "./$ARGV[0]") || (-d "./$ARGV[0]")) {
if ($ARGV[0] eq 'list') {
my $d;
if (defined($ARGV[1]) && $ARGV[1] eq '--all') {
$d = "$ENV{HOME}$c->{servicedir}";
} else {
$d = "$ENV{HOME}$c->{dir}";
}
opendir(D, $d) or die "Unable to list services\n";
print join("\n", sort(grep {!/^\.{1,2}$/} readdir(D))) . "\n";
closedir D;
} elsif ($ARGV[1] eq 'disable') {
my $d = "$ENV{HOME}$c->{dir}/$ARGV[0]";
if (-l $d) {
unlink("$d") or die "Unable to disable $ARGV[0]\n";
} else {
die "No such service $ARGV[0]\n";
}
} elsif ($ARGV[1] eq 'enable') {
my $d = "$ENV{HOME}$c->{dir}/$ARGV[0]";
if (-l $d) {
die "Service $ARGV[0] already enabled\n";
} else {
my $svcdir = "$ENV{HOME}$c->{servicedir}/$ARGV[0]";
if (-d $svcdir) {
symlink($svcdir, $d) or die "Unable to enable service $ARGV[0]\n";
} else {
die "No such service $ARGV[0]\n";
}
}
} elsif ((-l "./$ARGV[0]") || (-d "./$ARGV[0]")) {
chdir "./$ARGV[0]";
die "Is service running?\n" unless (-d './supervise');
chdir './supervise';
@@ -79,7 +125,8 @@ if ((-l "./$ARGV[0]") || (-d "./$ARGV[0]")) {
exit 0;
sub help {
print "Usage $0 SERVICE [start|stop|restart|status]\n";
print "Usage $0 SERVICE [start|stop|restart|status|enable|disable]\n";
print " $0 list [--all]\n";
exit 0;
}
@@ -97,5 +144,4 @@ sub status {
close S;
return $status;
}
# vim: set ft=perl noet ai :