#!@PERL_PATH@ -T -w ### BEGIN INIT INFO # Provides: epindexer # Required-Start: $local_fs $remote_fs $network $syslog $named # Required-Stop: $local_fs $remote_fs $network $syslog $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: EPrints indexer # Description: Start the EPrints indexer daemon as the correct user. ### END INIT INFO my $user = "@INSTALL_USER@"; my $group = "@INSTALL_GROUP@"; my $prefix = "@PREFIX@"; ###################################################################### # # chkconfig: - 85 15 # description: Start the eprints indexer daemon as the correct user # ###################################################################### # # ###################################################################### use Config::General qw( ParseConfig ); use English; use POSIX; use strict; if( $REAL_USER_ID != 0 ) { print "This script is intended to start the eprints indexer as a service.\nIt should only be run as root.\nExiting.\n"; exit 1; } if( !defined $ARGV[0] || $ARGV[0] !~ m/^(start|stop|status)$/ ) { print "Usage: $0 {start|stop|status}\n"; exit 1; } my $opt = $1; # These are not going via Platform, but this is a UNIX script, so meh. my $uid = (getpwnam($user))[2]; my $gid = (getgrnam($group))[2]; my @sgroups = ($gid); # gid + supplementary groups while(my( undef, undef, $gid, $members ) = getgrent()) { push @sgroups, $gid if $members =~ /\b$user\b/; } $REAL_GROUP_ID = $EFFECTIVE_GROUP_ID = "@sgroups"; $REAL_USER_ID = $EFFECTIVE_USER_ID = $uid; # Read the configuration file my $confname = "$prefix/cfg/epindexer.conf"; my %conf; if ( -f $confname ) { %conf = ParseConfig( $confname ); } # Configure verbosity my $noise = 0; if( defined $conf{'verbose'} and $conf{'verbose'} =~ m/^(\d+)$/ ) { $noise = $1; } # Set up the environment if ( exists $conf{'Environment'} ) { foreach my $k ( keys %{$conf{'Environment'}} ) { # regex capture groups don't inherit the source's taint $conf{'Environment'}{$k} =~ m/(.*)/; $ENV{$k} = $1; if ( $noise > 0 ) { print $k . '=' . $ENV{$k} . "\n"; } } } # Build the command line for the indexer my @indexer_cmd = ( "$prefix/bin/indexer" ); # logfile must be non-empty string if ( defined $conf{'logfile'} and $conf{'logfile'} =~ m/(.+)/ ) { push @indexer_cmd, '--logfile', $1; } # loglevel is a number from 0 to 6 if ( defined $conf{'loglevel'} and $conf{'loglevel'} =~ m/^([0-6])$/ ) { push @indexer_cmd, '--loglevel', $1; } # rollcount is a number if ( defined $conf{'rollcount'} and $conf{'rollcount'} =~ m/^(\d+)$/ ) { push @indexer_cmd, '--rollcount', $1; } # respawn is a number (of seconds) if ( defined $conf{'respawn'} and $conf{'respawn'} =~ m/(\d+)/ ) { push @indexer_cmd, '--respawn', $1; } push @indexer_cmd, $opt; if ( $noise > 0 ) { print 'Executing ' . join( ' ', @indexer_cmd ) . "\n"; } # Go! $| = 0; if( $opt eq 'start' ) { print 'Starting EPrints Indexer: '; } if( $opt eq 'stop' ) { print 'Stopping EPrints Indexer: '; } delete $ENV{'PATH'}; my $rv = system( @indexer_cmd ); $rv = $rv >> 8; if( $opt eq 'start' || $opt eq 'stop' ) { if( $rv == 0 ) { print ' [ OK ]'."\n"; } else { print ' [FAILED]'."\n"; } } exit $rv; =head1 COPYRIGHT =for COPYRIGHT BEGIN Copyright 2022 University of Southampton. EPrints 3.4 is supplied by EPrints Services. http://www.eprints.org/eprints-3.4/ =for COPYRIGHT END =for LICENSE BEGIN This file is part of EPrints 3.4 L. EPrints 3.4 and this file are released under the terms of the GNU Lesser General Public License version 3 as published by the Free Software Foundation unless otherwise stated. EPrints 3.4 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with EPrints 3.4. If not, see L. =for LICENSE END