Author |
Post |
|
#1 Tue Jun 28, 2011 12:43, 163 months ago.
|
Member
Registered: Aug 2009
Location: Belgium
|
Hi Keke,
My current setup is one GSM, an event handler, and several scripts reading and writing in 'incoming' and 'outgoing' directories.
Now, I want to add a second GSM, and run a completely separate copy of my application.
I thought it was just a matter of changing some paths in my scripts. Unfortunately 'incoming' and 'outgoing' are global options.
I've seen the 'queues' and 'provider' page, but it seems complicated (for me at least ;-) and it needs modifications in my code.
Instead of starting to learn how to use the queues, and change my code in production, I am considering a duplication of the whole service (daemon).
Thanks in advance for any advice, solution or pointer to documentation.
|
|
#2 Tue Jun 28, 2011 18:52, 163 months ago.
|
Administrator
Registered: May 2009
Location: Jyväskylä, Finland
|
You are right, in some cases different daemon makes more sense than single daemon handling multiple different applications. What is needed to do, is: - Get the latest script sms3 from this post. It has fixes as described, and now it also has a setting for configuration file, which is required when multiple daemons are running. - Run the current smsd with the new unmodified script, and create a copy of script for the new application, like /etc/init.d/ smsapp2. I think that it's better not to use any name which contains "smsd", because of pgrep etc. - In smsapp2 script set at least the following settings: PIDFILE="/var/run/smsapp2.pid" INFOFILE="/var/run/smsapp2.working" LOGFILE="/var/log/smsapp2.log" CONFFILE="/etc/smsapp2.conf" DAEMON=/usr/local/bin/smsapp2- Create spool directories for smsapp2, like /var/spool/smsapp2/outgoing and so on. - In the /etc/smsapp2.conf define all possible directories, at least (3.1.14): outgoing = /var/spool/smsapp2/outgoing incoming= /var/spool/smsapp2/incoming checked = /var/spool/smsapp2/checked- When using smsapp2 init script, infofile and pidfile are not needed to set in smsapp2.conf. - Copy /usr/local/bin/smsd to /usr/local/bin/smsapp2, and start smsapp2 with it's own init script.
|
|
#3 Wed Jun 29, 2011 10:57, 163 months ago.
|
Member
Registered: Aug 2009
Location: Belgium
Topic owner
|
What I did on my SUSE 11.2 : create a hard link to /usr/sbin/smsd named smsd2 copy /etc/init.d/smsd to /etc/init.d/smsd2 change this script as follow : No problem so far. Thank you for your answer, it reassures me about my choice.
|
|
#4 Wed Jun 29, 2011 13:09, 163 months ago.
|
Administrator
Registered: May 2009
Location: Jyväskylä, Finland
|
Can you show what kind of init.d script there is on SUSE? It seems that it's different than sms3, and different than one on Debian/Ubuntu. Just wondering what happens if daemon is going to be killed hardly...
Your choise smsd2 for the name might be okay, but what shows pgrep smsd when both daemons are running?
|
|
#5 Wed Jun 29, 2011 14:49, 163 months ago.
|
Member
Registered: Aug 2009
Location: Belgium
Topic owner
|
As you guessed it, pgrep smsd lists 4 pids, 2 pids for each instance. I have no problem because my init script doesn't use pgrep. It use "killproc". Here it is #!/bin/sh # This script can be used to start/stop smsd # as a daemon in Linux, Solaris, Cygwin, FreeBSD # and MAC OS X Terminal window (Darwin). # This script is to be used with smsd version >= 3.0.3. # # /etc/init.d/smsd # and its symbolic link # /usr/sbin/rcsmsd # ### BEGIN INIT INFO # Provides: smsd # Required-Start: $syslog $remote_fs # Should-Start: $time smtp # Required-Stop: $syslog $remote_fs # Should-Stop: $time smtp # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: Start/Stop smsd - a SMS Gateway software # Description: Start smsd to send and receive short # messages through GSM modems and mobile phones. ### END INIT INFO DAEMON="/usr/sbin/smsd" CONFFILE="/etc/sysconfig/smsd"
test -x $DAEMON || { echo "$DAEMON not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; }
test -r $CONFFILE || { echo "$CONFFILE not existing"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; }
# Read config . $CONFFILE
# If an unpriviledged user is selected, make sure that next two # files are writable by that user: PIDFILE="/var/run/smsd/smsd.pid" INFOFILE="/var/run/smsd/smsd.working" # Logfile can also be defined in here: #LOGFILE="/var/log/smsd/smsd.log"
# A program which turns power off for couple of seconds: RESETMODEMS=/usr/sbin/smsd_resetmodems NAME=smsd
# Shell functions sourced from /etc/rc.status: . /etc/rc.status
# Reset status of this service rc_reset
ARGS="-p${PIDFILE} -i${INFOFILE} -u${SMSD_USER} -g${SMSD_GROUP} ${SMSD_ARGS}"
case "$1" in start) echo -n "Starting SMS Daemon: " if checkproc $DAEMON ; then echo -n "already running" rc_failed 7 else if [ -f "${INFOFILE}" ]; then rm "${INFOFILE}" fi if [ -f "${PIDFILE}" ]; then rm "${PIDFILE}" fi # Delete lock files if they exist find /var/spool/sms -name '*.LOCK' -exec rm \{\} \; $DAEMON $ARGS fi rc_status -v ;;
stop) echo -n "Shutting down SMS Daemon: " if checkproc $DAEMON ; then /sbin/killproc -p "$PIDFILE" -TERM $DAEMON if [ -e "$PIDFILE" ]; then echo "Warning - SMS Daemon did not exit in a timely manner. Waiting..." while [ -e "$PIDFILE" ] && [ $SMSD_MAXWAIT -qt 0 ] ; do sleep 1 SMSD_MAXWAIT=$[SMSD_MAXWAIT-1] echo -n '.' [ $SMSD_MAXWAIT -eq 41 ] && echo done fi if checkproc $DAEMON ; then /sbin/killproc -p "$PIDFILE" -SIGKILL $DAEMON echo -n "Warning: nagios killed" fi else echo -n " SMS Daemon not running" rc_failed 7 fi # Remember status and be verbose rc_status -v ;;
try-restart|condrestart) ## Do a restart only if the service was active before. ## Note: try-restart is now part of LSB (as of 1.9). ## RH has a similar command named condrestart. if test "$1" = "condrestart"; then echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}" fi $0 status if test $? = 0; then $0 restart else rc_reset # Not running is not a failure. fi # Remember status and be quiet rc_status ;;
restart|reload) $0 stop $0 start # Remember status and be quiet rc_status ;;
status) echo -n "Checking for SMS Daemon " /sbin/checkproc $DAEMON rc_status -v ;;
probe) test /etc/smsd.conf -nt "$PIDFILE" && echo reload ;;
*) echo "Usage: $0 {start|stop|status|try-restart|restart|reload|probe}" exit 1 ;; esac rc_exit 'bash' Syntax Highlight powered by GeSHi On Redhat and derivatives, killproc is a function defined in a bourne shell script that is included in each init.d script. On Suse, it is a binary executable located in /sbin. If you want me to send you the Redhat script (~600 lines) or the Suse killproc man page (~200 lines), tell me how.
|
|
#6 Wed Jun 29, 2011 18:05, 163 months ago.
|
Administrator
Registered: May 2009
Location: Jyväskylä, Finland
|
Thanks, I do not need that script, just wanted to be sure about how things are done. Everything looks good. It talks about nagios, and probe refers to /etc/smsd.conf, but those are not big issues.
|
|
#7 Wed Jun 29, 2011 21:17, 163 months ago.
|
Member
Registered: Aug 2009
Location: Belgium
Topic owner
|
I got the RPM from a personal repository in the Suse factory. I suppose that the builder copied the nagios script and did not fully convert it to smstools.
|