在启动和关闭时运行shell脚本时出现错误
我使用的是Ubuntu 14.04 LTS,我想在启动时运行3个脚本。它们被命名如下:voe.sh
startUp.sh
和runDown.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
。请检查名称
只是为了学习几个细节:
执行runStart
runStart.sh
是两个不同的命令。在Windows中,不需要fileending.exe .com .bat等,在unix中,您需要始终写入完整的文件名。
下一个问题是,voe
执行runStart
和runStop
,换句话说,runStart
和runStop
不应该在/etc/rc.d
目录和朋友,只有voe
。将它们移动到已知的文件位置。例如/home/shankar/bin/runStart.sh
。当你要执行这两个助手时,你将需要使用完整路径,因为它们的路径不在$PATH
环境列表中(如果文件位于本地目录中,也会出现这种情况,那么您需要第一个cd /home/shanker/bin
执行之前像这样./runStart.sh
,以确保你在正确的目录,并从那里执行
的确切原因,我将'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'。我已经更新了上面的所有脚本。您可以参考它们以供参考。 –
/etc/rc2.d和朋友中有一些死链接。更新voe,并删除runStart和runStop –
我删除了'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'是否存在。它确实存在一个非常浅绿色的光。 –
与'sudo bash voe.sh开始',我只是试图检查脚本是否运行正常。我正在执行个人目录'〜\ Important Files',这就是为什么我用'voe.sh'调用它的原因。 –
请显示你的'ls -l /etc/rc2.d/S2voe''和所有相关文件s)和链接(s),我认为文件放置或PATH内容不匹配。顺便说一句,你确定root的PATH足够用于运行脚本吗? – GMichael
嗨@Michael,我已经按照您的要求添加了输出。请让我知道是否有其他需要。谢谢 –