summaryrefslogtreecommitdiffstats
path: root/stap-start-server
blob: 89ecf7897e2ac262796d1fdb87a7a65e37874b9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/bash

# Start a systemtap server
#
# Copyright (C) 2008, 2009 Red Hat Inc.
#
# This file is part of systemtap, and is free software.  You can
# redistribute it and/or modify it under the terms of the GNU General
# Public License (GPL); either version 2, or (at your option) any
# later version.

# This script attempts to start a systemtap server and echoes the
# process id, if successful.

# Initialize the environment
. ${PKGLIBEXECDIR}stap-env

startup_timeout=20

# start the server
${stap_pkglibexecdir}stap-serverd "$@" </dev/null >/dev/null &
server_pid=$!

# Make sure the server is started
for ((attempt=0; $attempt < $startup_timeout; ++attempt))
do
    server_started=0
    avahi_advertising=0
    server_listening=0

    # Has the server started?
    if ! (ps -e | grep stap-serverd | grep $server_pid) >/dev/null 2>&1; then
	# The stap-serverd script should start right away
	test $server_started = 0 -a $attempt -gt 1 && break
        sleep 1
        continue
    fi
    server_started=1

    # Is avahi advertizing the server?
    if ! (ps -fe | grep avahi-publish-service | grep $server_pid) > /dev/null 2>&1; then
	sleep 1
	continue
    fi
    avahi_advertising=1

    # Is the server listening?
    if ! (ps -fe | grep stap-server-connect | grep $server_pid) > /dev/null 2>&1; then
	sleep 1
	continue
    fi
    server_listening=1

    # The server is ready
    echo $server_pid
    exit 0
done

echo -n "Unable to start a systemtap server: " >&2

if test $server_started = 0; then
    echo "${stap_pkglibexecdir}stap-serverd did not start" >&2
elif test $avahi_advertising = 0; then
    echo "avahi is not advertising the server" >&2
elif test $server_listening = 0; then
    echo "The server could not open a connection to listen on" >&2
fi

# If the server partially started, then kill it.
test $server_started = 1 && ${stap_pkglibexecdir}stap-stop-server $server_pid

exit 1 # server did not start