summaryrefslogtreecommitdiff
path: root/astro/setiathome/files/setiathome.sh
blob: 939cc9ad3310f0eabb5fb48f5e2be38fdd509f30 (plain) (blame)
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
#!/bin/sh

#
# Start or stop setiathome, or set up working directory and register
#

# override these variables in ${PREFIX}/etc/setiathome.conf
seti_wrkdir=/var/db/setiathome		# primary working directory
seti_user=nobody					# user id to run as
seti_nice=1							# nice level to run at
seti_maxprocs=`sysctl -n hw.ncpu`	# max. number of processes to start

PREFIX=/`expr $0 : '/\(.*\)/etc/rc.d/setiathome.sh'`
if [ "x${PREFIX}" = "x/" ]; then
	printf "\n`basename $0`: Cannot determine PREFIX.\nPlease use the complete pathname." >&2
	exit 64
fi

if [ -f ${PREFIX}/etc/setiathome.conf ]; then
	. ${PREFIX}/etc/setiathome.conf
fi

i=${seti_maxprocs}
seti_wrksuff="."
while [ ${i} -gt 1 ]; do
	seti_wrksuff="${seti_wrksuff} ${i}"
	i=`expr ${i} - 1`
done

case $1 in
	start)
		for i in ${seti_wrksuff}; do
			if [ ! -d ${seti_wrkdir}/${i} ]; then
				logger -sp daemon.err -t setiathome \
					"unable to start: ${seti_wrkdir}/${i} is missing."
				exit 72
			fi
			if [ ! -f ${seti_wrkdir}/${i}/user_info.txt ]; then
				logger -sp daemon.err -t setiathome \
					"unable to start: please log in to SETI@home first. (${seti_wrkdir}/${i}/user_info.txt is missing.)"
				exit 72
			fi
		done
		for i in ${seti_wrksuff}; do
			su -m ${seti_user} -c \
				"(cd ${seti_wrkdir}/${i} && exec ${PREFIX}/bin/setiathome -email -nice ${seti_nice} >/dev/null &)"
			echo -n " SETI@home"
		done
		;;

	stop)
		killall setiathome
		;;

	register)
		# Create or update primary working directory (in case the uid changed)
		mkdir -p ${seti_wrkdir}
		chown ${seti_user} ${seti_wrkdir}
		chmod u=Xrw,g=Xr,o=Xr ${seti_wrkdir}
		if [ -f ${seti_wrkdir}/user_info.txt ]; then
			echo "      It seems you have already registered with SETI@home.  Would you like"
			echo -n "      to repeat the procedure? [Y/n] "
			read a
			if [ "X${a}" = "Xn" -o "X${a}" = "XN" ]; then
				seti_dontlogin=yes
			fi
		fi
		# No need to register if we've already done so
		if [ "X${seti_dontlogin}" != "Xyes" ]; then
			su -m ${seti_user} -c "cd ${seti_wrkdir} && ${PREFIX}/bin/setiathome -login"
		fi

		if [ ${seti_maxprocs} -gt 1 ]; then
			echo "      Updating additional working directories."
			i=${seti_maxprocs}
			while [ ${i} -gt 1 ]; do
				mkdir -p ${seti_wrkdir}/${i}
				chown ${seti_user} ${seti_wrkdir}/${i}
				chmod 755 ${seti_wrkdir}/${i}
				# Assume the user want's all processes to run with the same registration
				rm -f ${seti_wrkdir}/${i}/user_info.txt
				ln -sf ../user_info.txt ${seti_wrkdir}/${i}
				i=`expr ${i} - 1`
			done
		fi
		;;		

	*)
		echo "usage: `basename $0` {start|stop|register}" >&2
		exit 64
		;;
esac