- #!/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
- #------------------------------------------------------------------------------
- set -u
- # A safe way to run something with a controlled shell environment defined by
- # sourcing /p4/common/bin/p4_vars with a given SDP instance.
- # Usage:
- # p4master_run INSTANCE [-c] PROGRAM [PROGRAM_ARGS ...]
- #
- # where INSTANCE is an SDP instance number or name.
- function usage {
- echo -e "\nUsage:
- \tp4master_run INSTANCE [-c] PROGRAM [ARGS ...]
- where INSTANCE is an SDP instance number or name.
- The optional '-c' flag is for running programs from cron that
- send their own emails. It suppresses some errors to avoid
- duplicate emails from the cron daemon. Some errors, such as
- failures to start the called program, still are reported by
- cron email.
- PROGRAM can be a relative or absolute path, with optional arguments.\n"
- exit 3
- }
- # Bail with usage message if there are less than 2 arguments.
- [[ $# -lt 2 ]] && usage
- Instance=${1:-Unset}
- # Do nothing unless $Instance is defined. Make sure user didn't
- # try to pass a flag (e.g. '-c') as the first parameter.
- if [[ $Instance == Unset || $Instance == -* ]]; then
- echo -e "\nError: The Perforce instance name must be the first paramter. Aborting.\n" >&2
- usage
- fi
- # Save original full set of arguments. The shift will lose the instance
- # argument, which will cause this to fail if you run it as root, and it
- # tries to rerun as $OSUSER.
- AllArgs="$@"
- shift
- # Bail with usage message if nothing follows '-c'.
- if [[ $1 == -c ]]; then
- [[ $# -lt 2 ]] && usage
- CRON=yes
- shift
- fi
- SDP_CONF=/p4/common/bin/p4_vars
- if [[ ! -r "$SDP_CONF" ]]; then
- echo -e "\nError: No readable SDP config file [$SDP_CONF]. Aborting.\n" >&2
- exit 2
- fi
- # Load SDP controlled shell environment.
- source "$SDP_CONF" "$Instance" ||\
- { echo -e "\nError: Failed to load SDP environment.\n"; exit 1; }
- if [[ $(id -u) -eq 0 ]]; then
- exec su - $OSUSER -c "$0 $AllArgs"
- elif [[ $(id -u -n) != $OSUSER ]]; then
- echo "$0 can only be run by root or $OSUSER"
- exit 1
- fi
- Program=$1
- if [[ $Program == /* || $Program == \.* ]]; then
- # Non-path depedent, absolute or relative path specified.
- ProgramPath=$Program
- else
- # Path-dependent path specified.
- ProgramPath=$(which $Program)
- fi
- if [[ -z "$ProgramPath" ]]; then
- echo -e "\nError: The specified program [$Program] cannot be found. Aborting.\n" >&2
- exit 3
- fi
- if [[ ! -r "$ProgramPath" ]]; then
- echo -e "\nError: The specified program [$Program] cannot be found. Aborting.\n" >&2
- exit 3
- fi
- if [[ ! -x "$ProgramPath" ]]; then
- echo -e "\nError: The specified program [$Program] is not executable. Aborting.\n" >&2
- exit 3
- fi
- shift
- Args=$@
- $Program $Args
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 20726 | Robert Cowham | Catch up from dev | 8 years ago | |
#1 | 18586 | Robert Cowham | Branching using cowhamr.sdp.dev | 9 years ago | |
//guest/perforce_software/sdp/dev/Server/Unix/p4/common/bin/p4master_run | |||||
#5 | 16029 | C. Thomas Tyler |
Routine merge to dev from main using: p4 merge -b perforce_software-sdp-dev |
9 years ago | |
#4 | 12169 | Russell C. Jackson (Rusty) | Updated copyright date to 2015 Updated shell scripts to require an instance para...meter to eliminate the need for calling p4master_run. Python and Perl still need it since you have to set the environment for them to run in. Incorporated comments from reviewers. Left the . instead of source as that seems more common in the field and has the same functionality. « |
10 years ago | |
#3 | 12028 | C. Thomas Tyler | Refreshed SDP dev branch, merging down from main. | 10 years ago | |
#2 | 11466 | Russell C. Jackson (Rusty) | Initial work to simplify p4_vars and remove cluster stuff. Testing of named inst...ances surfaced some bugs that are in prod sdp, now fixed in dev. Added three triggers from RCJ SDP Moved p4review.cfg into the new /p4/common/cfg to go along with the instance_vars files. mkdirs.sh now generates an instance_p4review.cfg as well. Removed incremental p4verify to clean up a bit. It didn't support replicas and was really never used. All port settings now live in <instance>_vars file. You set what you want the ports to be in mkdirs.sh. There is no more fancy logic to try to guess what the port should be. You set it, and that is what it is. Remaining to do is to updated scripts to not need p4master_run. Saved that work for later since this is tested and works. « |
10 years ago | |
#1 | 10638 | C. Thomas Tyler | Populate perforce_software-sdp-dev. | 10 years ago | |
//guest/perforce_software/sdp/main/Server/Unix/p4/common/bin/p4master_run | |||||
#1 | 10148 | C. Thomas Tyler | Promoted the Perforce Server Deployment Package to The Workshop. | 11 years ago |