aboutsummaryrefslogtreecommitdiff
blob: 8f309d5b860539cff295600de119e92bc7959f1a (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/sbin/runscript
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or later

opts="start stop restart"


# Torque moved stuff from /usr/ to /var as of 2.0.0, so we check...
PBS_CFG_DIR_DEFAULT="/var/spool/PBS"
if [ -z "${PBS_CFG_DIRECTORY}" ]; then
	if [ -d "/usr/spool/PBS" -a -d "/var/spool/PBS" ]; then
		ewarn "WARNING! Both /usr/spool/PBS and /var/spool/PBS exist,"
		ewarn " but PBS_CFG_DIRECTORY isn't defined in /etc/conf.d/pbs."
		ewarn " Defaulting to ${PBS_CFG_DIR_DEFAULT}."
		PBS_CFG_DIRECTORY="${PBS_CFG_DIR_DEFAULT}"
	elif [ -d "/usr/spool/PBS" ]; then
		PBS_CFG_DIRECTORY="/usr/spool/PBS"
	elif [ -d "/var/spool/PBS" ]; then
		PBS_CFG_DIRECTORY="/var/spool/PBS"
	else
		eerror "Neither /usr/spool/PBS nor /var/spool/PBS exists."
		eerror "Are you sure you've actually installed an ebuild that provides virtual/pbs?"
		eerror "Try emerging sys-cluster/torque or sys-cluster/openpbs."
		exit 1
	fi
fi
	
SERVERPID="${PBS_CFG_DIRECTORY}/server_priv/server.lock"
MOMPID="${PBS_CFG_DIRECTORY}/mom_priv/mom.lock"
SCHEDULER="${PBS_SCHEDULER:=pbs_sched}"
SCHEDPID="${PBS_SCHEDULER_PID:=${PBS_CFG_DIRECTORY}/sched_priv/sched.lock}"

depend() {
	need net
}

checkconfig() {

	HOSTNAME="`hostname`"

	if [ ! -e ${PBS_CFG_DIRECTORY}/server_name ] ; then
		eerror "Missing config file ${PBS_CFG_DIRECTORY}/server_name"
		return 1
	else
		PBS_SERVER_NAME="`cat ${PBS_CFG_DIRECTORY}/server_name`"
		if [ "x${HOSTNAME}" == "x${PBS_SERVER_NAME}" ] ; then
			PBS_START_SERVER=1;
		else
			PBS_START_SERVER=0;
		fi
	fi

	if [ ! -e ${PBS_CFG_DIRECTORY}/mom_priv/config ] ; then
		eerror "Missing config file ${PBS_CFG_DIRECTORY}/mom_priv/config"
		return 1
	elif [ "${PBS_START_SERVER}" -eq 1 ] ; then
		PBS_START_MOM="${PBS_SERVER_AND_MOM:=1}"
	else
		PBS_START_MOM="1"
	fi

	if [ "${PBS_START_SERVER}" -eq 1 ] ; then
		if [ ! -e ${PBS_CFG_DIRECTORY}/server_priv/nodes ] ; then
			eerror "The startup script has detected this node is a server"
			eerror "from the file ${PBS_CFG_DIRECTORY}/server_name,"
			eerror "but the config file ${PBS_CFG_DIRECTORY}/server_priv/nodes is missing"
			return 1
		fi
	fi

	if [ "${PBS_START_SERVER}" -eq 1 ] ; then
		SCHEDPATH="`which ${SCHEDULER}`"
		SCHEDFILE="`basename ${SCHEDPATH}`"
		if [ -z "${SCHEDFILE}" ]; then
			eerror "No scheduler defined and can't find pbs_sched"
			return 1
		elif [ ! -x ${SCHEDPATH} ] ; then
			eerror "Scheduler defined but can't be executed"
			return 1
		fi
	fi
}

start() {
	checkconfig || return 1

	if [ "${PBS_START_MOM}" -gt 0 ] ; then
		ebegin "Starting pbs_mom"
		start-stop-daemon --start --pidfile ${MOMPID} \
			--startas /usr/sbin/pbs_mom
	fi

	if [ "${PBS_START_SERVER}" -gt 0 ] ; then
		ebegin "Starting pbs_server"
		start-stop-daemon --start --quiet --pidfile ${SERVERPID} \
			--startas /usr/sbin/pbs_server

		ebegin "Starting ${SCHEDFILE}" 
		start-stop-daemon --start --quiet --pidfile ${SCHEDPID} \
			--startas ${SCHEDPATH}
	fi

	eend $?
}

stop() {
	checkconfig || return 1

	ret1=0
	ret2=0
	ret3=0
	if [ -e ${MOMPID} ] ; then
		ebegin "Stopping pbs_mom"
		start-stop-daemon --stop --pidfile ${MOMPID}
		ret1=$?
		rm -f ${MOMPID}
	fi

	if [ -e ${SERVERPID} ] ; then
		ebegin "Stopping pbs_server"
		qterm -t immediate
		ret2=$?
		rm -f ${SERVERPID}
	fi

	if [ -e ${SCHEDPID} ] ; then
		ebegin "Stopping ${SCHEDFILE}"
		start-stop-daemon --stop --pidfile ${SCHEDPID}
		ret3=$?
		rm -f ${SCHEDPID}
	fi

	let ret=$(( $ret1 + $ret2 + $ret3 )) 
	eend $ret
}