From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.8 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, RP_MATCHES_RCVD shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: meta@public-inbox.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 627EB633820 for ; Thu, 17 Mar 2016 01:59:10 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] daemon: expand @ARGV paths for running in '/' Date: Thu, 17 Mar 2016 01:59:10 +0000 Message-Id: <20160317015910.27547-1-e@80x24.org> List-Id: We also require --stdout/--stderr/--pid-file to be absolute paths for USR2 usage. However, allow PSGI files for -httpd to be relative paths for ease-of-use. --- lib/PublicInbox/Daemon.pm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index c6fb62b..c9594a3 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -8,6 +8,7 @@ use warnings; use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/; use IO::Handle; use IO::Socket; +use Cwd qw/abs_path/; STDOUT->autoflush(1); STDERR->autoflush(1); require Danga::Socket; @@ -91,7 +92,24 @@ sub daemon_prepare ($) { die "No listeners bound\n" unless @listeners; } +sub check_absolute ($$) { + my ($var, $val) = @_; + if (defined $val && index($val, '/') != 0) { + die +"--$var must be an absolute path when using --daemonize: $val\n"; + } +} + sub daemonize () { + foreach my $i (0..$#ARGV) { + my $arg = $ARGV[$i]; + next unless -e $arg; + $ARGV[$i] = abs_path($arg); + } + check_absolute('stdout', $stdout); + check_absolute('stderr', $stderr); + check_absolute('pid-file', $pid_file); + chdir '/' or die "chdir failed: $!"; open(STDIN, '+<', '/dev/null') or die "redirect stdin failed: $!"; -- EW