mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-12 14:18:32 +00:00
Use daemon.sh to check PID file.
This commit is contained in:
74
bin/pt-stalk
74
bin/pt-stalk
@@ -15,6 +15,9 @@ set -u
|
|||||||
# See https://launchpad.net/percona-toolkit for more information.
|
# See https://launchpad.net/percona-toolkit for more information.
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
EXIT_STATUS=0
|
EXIT_STATUS=0
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
@@ -45,6 +48,9 @@ die() {
|
|||||||
# See https://launchpad.net/percona-toolkit for more information.
|
# See https://launchpad.net/percona-toolkit for more information.
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
declare -a ARGV # non-option args (probably input files)
|
declare -a ARGV # non-option args (probably input files)
|
||||||
declare EXT_ARGV # everything after -- (args for an external command)
|
declare EXT_ARGV # everything after -- (args for an external command)
|
||||||
OPT_ERR=${OPT_ERR:-""}
|
OPT_ERR=${OPT_ERR:-""}
|
||||||
@@ -216,6 +222,9 @@ parse_options() {
|
|||||||
# See https://launchpad.net/percona-toolkit for more information.
|
# See https://launchpad.net/percona-toolkit for more information.
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
TMPDIR=""
|
TMPDIR=""
|
||||||
OPT_TMPDIR=${OPT_TMPDIR:""}
|
OPT_TMPDIR=${OPT_TMPDIR:""}
|
||||||
|
|
||||||
@@ -253,6 +262,9 @@ rm_tmpdir() {
|
|||||||
# See https://launchpad.net/percona-toolkit for more information.
|
# See https://launchpad.net/percona-toolkit for more information.
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
_seq() {
|
_seq() {
|
||||||
local i=$1
|
local i=$1
|
||||||
awk "BEGIN { for(i=1; i<=$i; i++) print i; }"
|
awk "BEGIN { for(i=1; i<=$i; i++) print i; }"
|
||||||
@@ -271,6 +283,9 @@ _seq() {
|
|||||||
# See https://launchpad.net/percona-toolkit for more information.
|
# See https://launchpad.net/percona-toolkit for more information.
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
disk_space() {
|
disk_space() {
|
||||||
local filesystem=${1:-"$PWD"}
|
local filesystem=${1:-"$PWD"}
|
||||||
df -m -P $filesystem
|
df -m -P $filesystem
|
||||||
@@ -291,10 +306,54 @@ check_disk_space() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
# End safeguards package
|
# End safeguards package
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
|
|
||||||
|
# ###########################################################################
|
||||||
|
# daemon package
|
||||||
|
# This package is a copy without comments from the original. The original
|
||||||
|
# with comments and its test file can be found in the Bazaar repository at,
|
||||||
|
# lib/bash/daemon.sh
|
||||||
|
# t/lib/bash/daemon.sh
|
||||||
|
# See https://launchpad.net/percona-toolkit for more information.
|
||||||
|
# ###########################################################################
|
||||||
|
|
||||||
|
make_pid_file() {
|
||||||
|
local file=$1
|
||||||
|
local pid=$2
|
||||||
|
|
||||||
|
|
||||||
|
if [ -f "$file" ]; then
|
||||||
|
local old_pid=$(cat $file)
|
||||||
|
if [ -z "$old_pid" ]; then
|
||||||
|
die "PID file $file already exists but it is empty"
|
||||||
|
else
|
||||||
|
kill -0 $old_pid 2>/dev/null
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
die "PID file $file already exists and its PID ($old_pid) is running"
|
||||||
|
else
|
||||||
|
echo "Overwriting PID file $file because its PID ($old_pid)" \
|
||||||
|
"is not running"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$pid" > $file
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_pid_file() {
|
||||||
|
local file=$1
|
||||||
|
if [ -f "$file" ]; then
|
||||||
|
rm $file
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ###########################################################################
|
||||||
|
# End daemon package
|
||||||
|
# ###########################################################################
|
||||||
|
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
# collect package
|
# collect package
|
||||||
# This package is a copy without comments from the original. The original
|
# This package is a copy without comments from the original. The original
|
||||||
@@ -304,6 +363,9 @@ check_disk_space() {
|
|||||||
# See https://launchpad.net/percona-toolkit for more information.
|
# See https://launchpad.net/percona-toolkit for more information.
|
||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
|
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
CMD_GDB=${CMD_GDB:-"gdb"}
|
CMD_GDB=${CMD_GDB:-"gdb"}
|
||||||
CMD_IOSTAT=${CMD_IOSTAT:-"iostat"}
|
CMD_IOSTAT=${CMD_IOSTAT:-"iostat"}
|
||||||
CMD_MPSTAT=${CMD_MPSTAT:-"mpstat"}
|
CMD_MPSTAT=${CMD_MPSTAT:-"mpstat"}
|
||||||
@@ -693,8 +755,9 @@ main() {
|
|||||||
# Stalk while oktorun.
|
# Stalk while oktorun.
|
||||||
stalk
|
stalk
|
||||||
|
|
||||||
# Remove the secure tmpdir.
|
# Clean up.
|
||||||
rm_tmpdir
|
rm_tmpdir
|
||||||
|
remove_pid_file "$OPT_PID"
|
||||||
|
|
||||||
log "$0 exit status $EXIT_STATUS"
|
log "$0 exit status $EXIT_STATUS"
|
||||||
exit $EXIT_STATUS
|
exit $EXIT_STATUS
|
||||||
@@ -712,8 +775,17 @@ if [ "$(basename "$0")" = "pt-stalk" ] \
|
|||||||
rm_tmpdir
|
rm_tmpdir
|
||||||
|
|
||||||
if [ "$OPT_DAEMONIZE" = "yes" ]; then
|
if [ "$OPT_DAEMONIZE" = "yes" ]; then
|
||||||
|
# The PID file will at first have our (parent) PID.
|
||||||
|
# This is fine for ensuring that only one of us is
|
||||||
|
# running, but it's not fine if the user wants to use
|
||||||
|
# the PID in the PID file to check or kill the child
|
||||||
|
# process. So we'll need to update the PID file with
|
||||||
|
# the child's PID.
|
||||||
|
make_pid_file $OPT_PID $$
|
||||||
|
|
||||||
main "$@" </dev/null 1>>$OPT_LOG 2>&1 &
|
main "$@" </dev/null 1>>$OPT_LOG 2>&1 &
|
||||||
|
|
||||||
|
# Update PID file with the child's PID.
|
||||||
# The child PID is $BASHPID but that special var is only
|
# The child PID is $BASHPID but that special var is only
|
||||||
# in Bash 4+, so we can't rely on it. Consequently, we
|
# in Bash 4+, so we can't rely on it. Consequently, we
|
||||||
# use $! to get the PID of the child we just forked.
|
# use $! to get the PID of the child we just forked.
|
||||||
|
Reference in New Issue
Block a user