在启动和关闭时运行shell脚本时出现错误

问题描述:

我使用的是Ubuntu 14.04 LTS,我想在启动时运行3个脚本。它们被命名如下:voe.shstartUp.shrunDown.sh在启动和关闭时运行shell脚本时出现错误

脚本voe.sh是主要的文件,该文件将依次调用其他2个文件,这取决于系统是否开机或分别关停。

我将所有3个文件复制到目录/etc/init.d。然后我用sysv-rc-conf工具,将它们添加到适当的运行级别如下:

[email protected]:~/Important Files$ sysv-rc-conf --list voe 
voe   0:off 1:off 2:on 3:on 4:on 5:on 6:off 
[email protected]:~/Important Files$ sysv-rc-conf --list startUp 
startUp  0:off 1:off 2:on 3:on 4:on 5:on 6:off 
[email protected]:~/Important Files$ sysv-rc-conf --list runDown 
runDown  0:off 1:off 2:on 3:on 4:on 5:on 6:off 

我查了所有的rc*.d目录和所有的人有正确的符号链接/etc/init.d目录中的所有3个脚本一直保持。这些脚本的权限也似乎是正确的:

[email protected]:/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 

即使经过这一切,当我重新启动我的机器,我boot.log说:

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

而且,我试图测试从另一个voe.sh目录中运行它(其中我已经在同一目录还保存,另2)如下:

[email protected]:~/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 
* 

我不与Ubuntu的专家。所以如果我能在这个问题上得到任何指导,那就太好了。

感谢

编辑

以下是ls -l命令在3个脚本我关心:

[email protected]:/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 

[email protected]:/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 

[email protected]:/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 

[email protected]:/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 

[email protected]:/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 

[email protected]:/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 

[email protected]:/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 

[email protected]:/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脚本(在/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 <[email protected]> 
# Tweaked by Gus Landis <[email protected]> 
# Tweaked further by David Wicksell <[email protected]> 

# 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脚本(在/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 <[email protected]> 
#   & DL Wicksell <[email protected]> 
# 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脚本(在/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 <[email protected]> 
#   & DL Wicksell <[email protected]> 
# 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 $ 

我见名称不匹配。 /etc/init.d内有voe,您尝试拨打voe.sh。请检查名称

+0

与'sudo bash voe.sh开始',我只是试图检查脚本是否运行正常。我正在执行个人目录'〜\ Important Files',这就是为什么我用'voe.sh'调用它的原因。 –

+0

请显示你的'ls -l /etc/rc2.d/S2voe''和所有相关文件s)和链接(s),我认为文件放置或PATH内容不匹配。顺便说一句,你确定root的PATH足够用于运行脚本吗? – GMichael

+0

嗨@Michael,我已经按照您的要求添加了输出。请让我知道是否有其他需要。谢谢 –

只是为了学习几个细节:
执行runStartrunStart.sh是两个不同的命令。在Windows中,不需要fileending.exe .com .bat等,在unix中,您需要始终写入完整的文件名。

下一个问题是,voe执行runStartrunStop,换句话说,runStartrunStop不应该在/etc/rc.d目录和朋友,只有voe。将它们移动到已知的文件位置。例如/home/shankar/bin/runStart.sh。当你要执行这两个助手时,你将需要使用完整路径,因为它们的路径不在$PATH环境列表中(如果文件位于本地目录中,也会出现这种情况,那么您需要第一个cd /home/shanker/bin执行之前像这样./runStart.sh,以确保你在正确的目录,并从那里执行

+0

的确切原因,我将'startUp.sh'和'runDown.sh'移至'/ home/shankar/bin'。我删除了rc0.d和其他朋友目录中的相应链接。现在,'init.d'目录中只存在'voe'(不是'voe.sh')。在'voe'脚本中,我提供了'startUp.sh'和'runDown.sh'目录的完整路径。但是,我仍然收到相同的错误:'/etc/init.d/rc:121:/etc/init.d/rc:/etc/rc2.d/S20voe:not found'。我已经更新了上面的所有脚本。您可以参考它们以供参考。 –

+0

/etc/rc2.d和朋友中有一些死链接。更新voe,并删除runStart和runStop –

+0

我删除了'rc2.d'目录下的'voe'和朋友的所有链接。我还使用'update-rc.d'再次添加了该服务。 'sysv-rc-conf'的输出也以不同的格式显示我'voe'。但'boot.log'只能说'/etc/init.d/rc:121:/etc/init.d/rc:/etc/rc2.d/S20voe:not found'。作为当前directoy的'rc2.d',我还通过'ls -l'检查了'S20voe'是否存在。它确实存在一个非常浅绿色的光。 –