简体   繁体   中英

Facing errors with running shell scripts at startup and poweroff

I am using Ubuntu 14.04 LTS and I want to run 3 scripts at startup. They are named as follows: voe.sh startUp.sh and runDown.sh

The script voe.sh is the main file which will in turn call the other 2 files, depending on if the system is booting up or shutting down respectively.

I copied all the 3 files to the directory /etc/init.d . I then used sysv-rc-conf utility, to add them to appropriate run levels as follows:

shankar@shannkardell:~/Important Files$ sysv-rc-conf --list voe
voe          0:off  1:off   2:on    3:on    4:on    5:on    6:off
shankar@shannkardell:~/Important Files$ sysv-rc-conf --list startUp
startUp      0:off  1:off   2:on    3:on    4:on    5:on    6:off
shankar@shannkardell:~/Important Files$ sysv-rc-conf --list runDown
runDown      0:off  1:off   2:on    3:on    4:on    5:on    6:off

I checked the all the rc*.d directories and all of them have correct symbolic links to /etc/init.d directory where all the 3 scripts have been kept. The permissions of these scripts also seem to be correct:

shankar@shannkardell:/etc/init.d$ ls -l voe startUp runDown
-rwxr-xr-x 1 root root 2781 Apr 20 14:58 runDown
-rwxr-xr-x 1 root root 2576 Apr 20 14:57 startUp
-rwxr-xr-x 1 root root 2242 Apr 20 14:57 voe

Even after all this, when I restart my machine, my boot.log says:

/etc/init.d/rc: 121: /etc/init.d/rc: /etc/rc2.d/S20voe: not found

Also, I tried to test the voe.sh from another directory (where I had also kept the other 2 in the same directory) by running it as follows:

shankar@shannkardell:~/Important Files$ sudo bash voe.sh start
Starting GT.M for shankarNow using node v4.2.6 (npm v2.14.12)
-su: startUp.sh: command not found
* 

I am not an expert with Ubuntu. So if I could get any guidance on this issue, it would be great.

Thanks

Edit

Following is the ls -l on the 3 scripts I am concerned about:

shankar@shannkardell:/etc/init.d$ ls -l runDown voe startUp
-rwxr-xr-x 1 root root 2781 Apr 20 14:58 runDown
-rwxr-xr-x 1 root root 2242 Apr 20 14:57 voe
-rwxr-xr-x 1 root root 2576 Apr 20 14:57 startUp

shankar@shannkardell:/etc/rc0.d$ ls -l *runDown *startUp *voe
lrwxrwxrwx 1 root root 17 Apr 13 21:24 K80runDown -> ../init.d/runDown
lrwxrwxrwx 1 root root 17 Apr 13 21:24 K80startUp -> ../init.d/startUp
lrwxrwxrwx 1 root root 13 Apr 20 18:58 K80voe -> ../init.d/voe

shankar@shannkardell:/etc/rc1.d$ ls -l *runDown *startUp *voe
lrwxrwxrwx 1 root root 17 Apr 13 21:24 K80runDown -> ../init.d/runDown
lrwxrwxrwx 1 root root 17 Apr 13 21:24 K80startUp -> ../init.d/startUp
lrwxrwxrwx 1 root root 13 Apr 20 18:58 K80voe -> ../init.d/voe

shankar@shannkardell:/etc/rc2.d$ ls -l *runDown *startUp *voe
lrwxrwxrwx 1 root root 17 Apr 20 15:28 S20runDown -> ../init.d/runDown
lrwxrwxrwx 1 root root 17 Apr 20 15:28 S20startUp -> ../init.d/startUp
lrwxrwxrwx 1 root root 13 Apr 20 18:58 S20voe -> ../init.d/voe

shankar@shannkardell:/etc/rc3.d$ ls -l *runDown *startUp *voe
lrwxrwxrwx 1 root root 17 Apr 20 15:28 S20runDown -> ../init.d/runDown
lrwxrwxrwx 1 root root 17 Apr 20 15:28 S20startUp -> ../init.d/startUp
lrwxrwxrwx 1 root root 13 Apr 20 18:58 S20voe -> ../init.d/voe

shankar@shannkardell:/etc/rc4.d$ ls -l *runDown *startUp *voe
lrwxrwxrwx 1 root root 17 Apr 20 15:28 S20runDown -> ../init.d/runDown
lrwxrwxrwx 1 root root 17 Apr 20 15:28 S20startUp -> ../init.d/startUp
lrwxrwxrwx 1 root root 13 Apr 20 18:58 S20voe -> ../init.d/voe

shankar@shannkardell:/etc/rc5.d$ ls -l *runDown *startUp *voe
lrwxrwxrwx 1 root root 17 Apr 20 15:28 S20runDown -> ../init.d/runDown
lrwxrwxrwx 1 root root 17 Apr 20 15:28 S20startUp -> ../init.d/startUp
lrwxrwxrwx 1 root root 13 Apr 20 18:58 S20voe -> ../init.d/voe

shankar@shannkardell:/etc/rc6.d$ ls -l *runDown *startUp *voe
lrwxrwxrwx 1 root root 17 Apr 13 21:24 K80runDown -> ../init.d/runDown
lrwxrwxrwx 1 root root 17 Apr 13 21:24 K80startUp -> ../init.d/startUp
lrwxrwxrwx 1 root root 13 Apr 20 18:58 K80voe -> ../init.d/voe

voe.sh script (Residing at /etc/init.d/voe):

#! /bin/bash
#
# $Source: /home/fwslc/lsb-fwslc/inst.bin/RCS/voe,v $
# $Revision: 20100820.1 $
#
# chkconfig: 2345 15 85
# description: GT.M System Startup and Shutdown scripts
#
### BEGIN INIT INFO
# Provides:          wvehrvoe10
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Sequence Managers startup/rundown scripts
# Description:       System Startup and Shutdown scripts
### END INIT INFO

# Author: K.S. Bhaskar <bhaskar@worldvista.org>
# Tweaked by Gus Landis <ldl@linux.com>
# Tweaked further by David Wicksell <dlw@linux.com>

# Do NOT "set -e"

# Source function library
bash -xv
source /lib/lsb/init-functions

NAME="`basename $0 | sed 's/...//'`"
PATH=/home/shankar/.nvm/versions/node/v4.2.6/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
DESC="GT.M start/rundown scripts"
SCRIPTNAME=/etc/init.d/$NAME

#
# Function that starts WorldVistA EHR VOE/2.0oe
#
do_start() {
  echo -n Starting GT.M for ${NAME} 
  echo `date` - Starting GT.M for ${NAME} >> /var/log/boot.log
  su - ${NAME} -c /home/shankar/bin/startUp.sh
  if [ $? == 0 ]; then
    log_success_msg
    echo GT.M for ${NAME} started successfully >> /var/log/boot.log
    touch /var/lock/${NAME}
  else
    log_failure_msg
    echo GT.M for ${NAME} did not start successfully >> /var/log/boot.log
  fi
  echo
}

#
# Function that stops WorldVistA EHR VOE/2.0oe
#
do_stop() {
  echo -n Stopping GT.M for ${NAME} 
  echo `date` - Stopping GT.M for ${NAME} >> /var/log/boot.log
  su - ${NAME} -c /home/shankar/runDown.sh
  if [ $? == 0 ]; then
    log_success_msg
    rm /var/lock/${NAME}
    echo GT.M for ${NAME} stopped successfully >> /var/log/boot.log
  else
    log_failure_msg
    echo GT.M for ${NAME} did not stop successfully >> /var/log/boot.log
  fi
  echo
}

case "$1" in
  start)
    do_start
    ;;
  stop)
    do_stop
    ;;
  restart|force-reload)
    do_stop
    do_start
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    echo "Not expected to run from /etc/init.d, but rather from /etc/rc?.d"
    exit 3
    ;;
esac

# $RCSfile: voe,v $

startUp.sh script (Residing at /home/shankar/bin/startUp.sh):

#! /bin/bash -l
#
# Package:       FWSLC Infrastructure
# File:          gtm_start.sh
# Summary:       init script to start GT.M
# Maintainer:    LD Landis & DL Wicksell
# Last Modified: Aug 20, 2010
#
# Written by LD Landis <ldl@linux.com>
#          & DL Wicksell <dlw@linux.com>
# Copyright © 2010 Fourth Watch Software, LC
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License (AGPL)
# as published by the Free Software Foundation, either version 3 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
#
# $Source: /home/fwslc/lsb-fwslc/inst.bin/RCS/gtm_start.sh,v $
# $Revision: 20100820.1 $
#
# Ensures that GT.M is recovered and starts new journal
bash -xv
cd /home/shankar
source /home/shankar/EHR/env2

LOGDIR=/home/shankar/log/`basename $0 .sh`
LOG=${LOGDIR}/`date +"%Y%m%d%H%M"`

if [ ! -d ${LOGDIR} ] ; then
  mkdir -p ${LOGDIR}
fi

if [ ! -r /home/shankar/EHR/g/mumps.mjl ] ; then
  echo "No database to start in `pwd`"                         > ${LOG}
  exit 1
fi

echo "**Recover Journals**"                                   >> ${LOG}
mupip journal -recover -backward /home/shankar/EHR/g/mumps.mjl              >> ${LOG} 2>&1
#mupip journal -recover -backward ~/EHR/j/ewdgbl.mjl               >> ${LOG} 2>&1
echo "**Enable Journals**"                                    >> ${LOG}
mupip set -journal="enable,on,before" -file /home/shankar/EHR/g/mumps.dat   >> ${LOG} 2>&1
#mupip set -journal="enable,on,before" -file ~/EHR/g/ewdgbl.dat    >> ${LOG} 2>&1
echo "**Rundown database**"                                   >> ${LOG}
mupip rundown -reg "*"                                        >> ${LOG} 2>&1
if [ "${REPL_SIDE}" == "PRIMARY" ] ; then
  echo "**Starting Taskman**"                                 >> ${LOG}
  echo y | mumps -run START^ZTMB                              >> ${LOG} 2>&1
  if [ $? == 0 ] ; then
    echo "###Successfully finished###"                        >> ${LOG}
  else
    echo "###Did not run successfully###"                     >> ${LOG}
  fi
fi

exit 0

# $RCSfile: gtm_start.sh,v $

runDown.sh script (Residing at /home/shankar/bin/runDown.sh):

#! /bin/bash -l
#
# Package:       FWSLC Infrastructure
# File:          gtm_rundown.sh
# Summary:       init script to stop GT.M
# Maintainer:    LD Landis & DL Wicksell
# Last Modified: Jan 24, 2012
#
# Written by LD Landis <ldl@linux.com>
#          & DL Wicksell <dlw@linux.com>
# Copyright © 2010-2012 Fourth Watch Software, LC
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License (AGPL)
# as published by the Free Software Foundation, either version 3 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
#
# $Source: /home/fwslc/lsb-fwslc/inst.bin/RCS/gtm_rundown,sh,v $
# $Revision: 20121217.1 $
#
# Stop GT.M
bash -xv
cd /home/shankar
source /home/shankar/EHR/env2

LOGDIR=/home/shankar/log/`basename $0 .sh`
LOG=${LOGDIR}/`date +"%Y%m%d%H%M"`

if [ ! -d ${LOGDIR} ] ; then
  mkdir -p ${LOGDIR}
fi

if [ ! -r /home/shankar/EHR/g/mumps.dat ] ; then
  echo "No db to rundown in `pwd`"                           > ${LOG}
  exit 1
fi

if [ "${REPL_SIDE}" == "PRIMARY" ] ; then
  (
  mumps -direct << EOF
s U="^"
d STOP^ZTMKU
y
y
y
h
EOF
  )                                                             >> ${LOG} 2>&1

  TEST="true" STIME=`date '+%s'`
  while ${TEST}
    do
      gtm_prompt="" TEST=`mumps -direct <<< 'w $d(^%ZTSCH("RUN"))#2'`

      if [ ${TEST} -eq 1 ] ; then
        TEST="true"
      elif [ ${TEST} -eq 0 ] ; then
        TEST="false"
      else
        echo "`basename $0` may have a bug in it"               >> ${LOG} 2>&1
      fi

      NOW=`date '+%s'`

      if [ `expr ${NOW} - ${STIME}` -ge 30 ] ; then
        TEST="false"

        echo "TaskMan took too long to shut down, force quit"   >> ${LOG} 2>&1
        echo
      fi
    done
fi

CMD="pgrep -u ${USER} mumps"

PROCS=`eval ${CMD}`
if [ ! -z "${PROCS}" ] ; then
  for i in `echo ${PROCS}`
  do
    mupip stop ${i}                                             >> ${LOG} 2>&1
  done                                                          
fi

sleep 1

PROCS=`eval ${CMD}`
if [ ! -z "${PROCS}" ] ; then
  pkill -9 mumps                                                >> ${LOG} 2>&1
fi

sleep 1

mupip rundown -region "*"                                       >> ${LOG} 2>&1

exit 0

# $RCSfile: gtm_rundown.sh,v $

I see name mismatch. There is voe inside /etc/init.d and you try to call voe.sh . Please check the names

Just to learn a couple of details:
Executing runStart runStart.sh are two different commands. In Windows, the fileending .exe .com .bat etc are not needed, in unix you need to write the full filename always.

Next problem, voe executes runStart and runStop , in other words, runStart and runStop should not be in the /etc/rc.d directory and friends, only voe . Move them to a known file-location. For instance /home/shankar/bin/runStart.sh . You are then going to need to use a full-path when you are going to execute these two helpers, since their path is not in the $PATH environment list (this also goes if the file is in the local directory, then you would need to first cd /home/shanker/bin before executing like this ./runStart.sh , to make sure you are in the correct directory, and execute from there.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM