p4d_base #15

  • //
  • guest/
  • perforce_software/
  • sdp/
  • main/
  • Server/
  • Unix/
  • p4/
  • common/
  • bin/
  • p4d_base
  • View
  • Commits
  • Open Download .zip Download (5 KB)
#!/bin/bash
#==============================================================================
# Copyright and license info is available in the LICENSE file included with
# the Server Deployment Package (SDP), and also available online:
# https://swarm.workshop.perforce.com/projects/perforce-software-sdp/view/main/LICENSE
#------------------------------------------------------------------------------

# Helix Server base init script

# Do nothing unless $SDP_INSTANCE is defined.
export SDP_INSTANCE=${1:-Unset}

if [[ $SDP_INSTANCE == Unset ]]; then
   echo -e "\nError: The SDP_INSTANCE is not defined.\n."
   exit 1
fi

# Load SDP controlled shell environment.
source /p4/common/bin/p4_vars "$SDP_INSTANCE"
if [[ $? -ne 0 ]]; then
   echo -e "\nError: Failed to load SDP environment for instance $SDP_INSTANCE.\n"
   exit 1
fi

if [[ $(id -u) -eq 0 ]]; then
   exec su - $OSUSER -c "$0 $*"
elif [[ $(id -u -n) != $OSUSER ]]; then
   echo "$0 can only be run by root or $OSUSER"
   exit 1
fi

if [[ ! -x $P4DBIN ]]; then
   echo -e "\nError: $P4DBIN is not executable."
   exit 2;
fi

# Ensure that the '--pid-file' argument is provided, and add it if it is not.
# This is intended to prevent problems upgrading the SDP in case the
# /p4/common/config/p4_N.vars file isn't updated to use the new template.
if [[ "$P4D_FLAGS" != *"--pid-file"* ]]; then
   export P4D_FLAGS="$P4D_FLAGS --pid-file"
fi

# See how we were called.
case "${2:-status}" in
   force_start)
      echo "Starting $P4DBIN $P4D_FLAGS"
      $P4DBIN $P4D_FLAGS
   ;;
   start)
      if [[ -r $P4ROOT/db.domain ]]; then
         PreflightLog=${P4TMP}/preflight.log
         $P4DBIN -r $P4ROOT -xvU > $PreflightLog 2>&1
         ExitCode=$?
         echo EXIT_CODE=$ExitCode >> $PreflightLog

         if [[ $ExitCode -ne 0 ]]; then
            echo -e "\nError: DB check with 'p4d -xvU' failed.  Database integrity is in question.  Please Contact Perforce Support (support@perforce.com).  The force_start option is availble, but not recommended.  See:\n"
            cat $PreflightLog
            /bin/rm -f $PreflightLog
            exit 1
         else
            /bin/rm -f $PreflightLog
         fi
      fi

      # Setting P4JOURNAL in the database to $P4JOURNAL.
      $P4DBIN -r $P4ROOT "-cset P4JOURNAL=$P4JOURNAL"
      echo "Starting $P4DBIN $P4D_FLAGS"
      $P4DBIN $P4D_FLAGS
   ;;
   status)
      if [[ -r $P4ROOT/server.pid ]]; then
         pid=$(cat $P4ROOT/server.pid)
         echo -e "\nThe $P4ROOT/server.pid file contains pid $pid.  Pid info:"
         $PS -f -p $pid
         echo

         if [[ $? -ne 0 ]]; then
            echo -e "\nError: A server.pid file exists, but that process id is not running.  This could indicate abnormal process termination.\n"
         fi
      fi

      $P4BIN -p $P4PORT -u $P4USER info -s
   ;;
   admin_stop)
      # If there is no server.pid file, shut down the old fashioned way.
      echo -n "Shutting down $P4DBIN: "
      if [[ "${P4REPLICA}" == "FALSE" ]]; then
         $P4BIN -p $P4PORT -u $P4USER login < /p4/common/config/.p4passwd.${P4SERVER}.admin
      fi
      $P4BIN -p $P4PORT -u $P4USER admin stop
      sleep 5
      $P4BIN -p $P4PORT info > /dev/null 2>&1
      ExitCode=$?
      if [[ $ExitCode -eq 0 ]]; then
         echo -e "\nError: Server shutdown failed."
         exit 1
      else
         exit 0
      fi
   ;;
   stop)
      if [[ -r $P4ROOT/server.pid ]]; then
         pid=$(cat $P4ROOT/server.pid)

         $PS -p $pid > /dev/null 2>&1
         status=$?

         if [[ $status -eq 0 ]]; then
            echo -e "\nSending SIGTERM signal to pid $pid in $P4ROOT/server.pid."
            kill $pid
            sleep 1

            $PS -p $pid > /dev/null 2>&1
            status=$?

            if [[ $status -eq 0 ]]; then
               echo -n "Waiting for p4d to shutdown ..."

               while [[ $status -eq 0 ]]; do
                  echo -n "."
                  sleep 5
                  $PS -p $pid > /dev/null 2>&1
                  status=$?
               done
            fi
            echo -e "\nConfirmed shutdown of $P4DBIN."
         else
            echo -e "\nError: A server.pid file exists, but that process id is not running.  This could indicate abnormal process termination.\n"
            exit 1
         fi
      else
         echo -e "\nWarning: Missing $P4ROOT/server.pid.  Attempting shtudown with 'p4 admin stop'.\n"
         $0 $SDP_INSTANCE admin_stop
      fi
   ;;
   restart)
      $0 $SDP_INSTANCE stop
      $0 $SDP_INSTANCE start
   ;;
   *)
      echo -e "\nUsage: $0 SDP_INSTANCE {start|stop|admin_stop|status|restart|force_start}\n"
      exit 1
   ;;
esac

exit 0

# Change User Description Committed
#32 31566 C. Thomas Tyler Released SDP 2024.2.31564 (2025/05/14).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#31 31077 C. Thomas Tyler Released SDP 2024.2.31075 (2024/12/20).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#30 30297 C. Thomas Tyler Released SDP 2023.2.30295 (2024/05/08).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#29 29143 C. Thomas Tyler Released SDP 2022.1.29141 (2022/10/29).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#28 28989 C. Thomas Tyler Released SDP 2022.1.28987 (2022/08/25).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#27 28858 C. Thomas Tyler Released SDP 2022.1.28855 (2022/05/27).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#26 28412 C. Thomas Tyler Released SDP 2021.2.28410 (2021/11/24).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#25 27958 C. Thomas Tyler Released SDP 2020.1.27955 (Patch 12, 2021/08/13).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev',
with selective removal of work-in-progress files.
#24 27331 C. Thomas Tyler Released SDP 2020.1.27325 (2021/01/29).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#23 26403 C. Thomas Tyler Released SDP 2019.3.26400 (2020/03/28).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#22 26161 C. Thomas Tyler Released SDP 2019.3.26159 (2019/11/06).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#21 25483 C. Thomas Tyler Released SDP 2019.1.25480 (2019/04/11).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#20 25245 C. Thomas Tyler Released SDP 2019.1.25238 (2019/03/02).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#19 23510 C. Thomas Tyler Released SDP 2018.1.23504 (2018/01/19).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev',
with selective removal of work-in-progress files.
#18 23331 C. Thomas Tyler Released SDP 2017.4.23329 (2017/12/05).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#17 23044 C. Thomas Tyler Released SDP 2017.3.23041 (2017/10/24).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#16 22685 Russell C. Jackson (Rusty) Update main with current changes from dev.
#15 20565 C. Thomas Tyler Released SDP 2016.1.20559 (2016/09/14).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev',
with selective removal of work-in-progress files.
#14 20519 C. Thomas Tyler Released SDP 2016.1.20491 (2016/09/09).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev',
with selective removal of work-in-progress files.
#13 20481 C. Thomas Tyler Released SDP 2016.1.20460.

          Copy Up using 'p4 copy -r -b perforce_software-sdp-dev',
          with selective removal of changes related to work-in-progress files.
#12 20353 C. Thomas Tyler Released SDP 2016.1.20348.
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev',
with selective removal of changes related to work-in-progress
changes.
#11 18688 Russell C. Jackson (Rusty) Copy dev to main
#10 17315 C. Thomas Tyler Released SDP/MultiArch/2016.1/17297 (2016/02/03).

Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#9 16263 Russell C. Jackson (Rusty) Added shutdown check to init script and used it in weekly_sync_replica.
#8 15856 C. Thomas Tyler Replaced the big license comment block with a shortened
form referencing the LICENSE file included with the SDP
package, and also by the URL for the license file in
The Workshop.
#7 15777 C. Thomas Tyler No functional changes.

Style Policing only on bash scripts only.

Normalized indentation and line breaks, removed offending tabs, and general whitespace
usage.
#6 15776 C. Thomas Tyler Fixed a typo, a spurious back-tick (`) character that somehow
snuck in.  Also fixed some tab/whitespace inconsistency issues.
#5 15775 Russell C. Jackson (Rusty) Added test to only login on a master
#4 13908 C. Thomas Tyler Pushing SDP 2015.1.13906.
#3 12171 Russell C. Jackson (Rusty) Merge in changes to remove the need for p4master_run.
#2 11524 Russell C. Jackson (Rusty) Released updated version of the SDP from Dev.
#1 10148 C. Thomas Tyler Promoted the Perforce Server Deployment Package to The Workshop.