| #!/usr/bin/env perl |
| |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| use strict; |
| use warnings; |
| |
| use Cwd qw/realpath/; |
| use Fcntl; |
| use File::Basename; |
| use FindBin; |
| use Getopt::Long qw/:config require_order gnu_compat/; |
| |
| sub usage |
| { |
| die "usage: $0 (--restart <service> | --tail <service> | --down) [-d <var dir>]\n"; |
| } |
| |
| # Parse arguments |
| my %opt = ( |
| 'vardir' => realpath("$FindBin::Bin/../var"), |
| ); |
| |
| usage() unless GetOptions(\%opt, 'command=s', 'restart=s', 'down', 'tail=s', 'vardir|d=s'); |
| |
| my $svdir = "$opt{vardir}/sv"; |
| my $command; |
| |
| if ($opt{command}) { |
| usage() if $command; |
| $command = $opt{command}; |
| } |
| |
| if ($opt{down}) { |
| usage() if $command; |
| $command = 'd'; |
| } |
| |
| if ($opt{restart}) { |
| usage() if $command; |
| $command = "k $opt{restart}"; |
| } |
| |
| if ($opt{tail}) { |
| usage() if $command; |
| exec "tail", "-f", "$svdir/$opt{tail}.log" |
| or die "exec failed: $!\n"; |
| } |
| |
| usage() unless $command; |
| |
| my $fifofile = "$svdir/.ctrl"; |
| sysopen my $fifofh, $fifofile, O_WRONLY or die "Can't open control fifo, perhaps supervise is not running: $!\n"; |
| print $fifofh "$command\n"; |
| close $fifofh; |