我正在尝试为 redhat linux 上的一个进程设置一个初始化脚本:
#!/bin/sh
#
# Startup script for Conquest
#
# chkconfig: 345 85 15 - start or stop process definition within the boot process
# description: Conquest DICOM Server
# processname: conquest
# pidfile: /var/run/conquest.pid
# Source function library. This creates the operating environment for the process to be started
. /etc/rc.d/init.d/functions
CONQ_DIR=/usr/local/conquest
case "$1" in
start)
echo -n "Starting Conquest DICOM server: "
cd $CONQ_DIR && daemon --user mruser ./dgate -v - Starts only one process of a given name.
echo
touch /var/lock/subsys/conquest
;;
stop)
echo -n "Shutting down Conquest DICOM server: "
killproc conquest
echo
rm -f /var/lock/subsys/conquest
rm -f /var/run/conquest.pid - Only if process generates this file
;;
status)
status conquest
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reloading process-name: "
killproc conquest -HUP
echo
;;
*)
echo "Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0
然而,cd $CONQ_DIR
由于脚本错误,它被忽略了:
# ./conquest start
Starting Conquest DICOM server: -bash: ./dgate: No such file or directory
[FAILED]
由于某种原因,我必须以 ./dgate 形式运行 dgate。我无法指定完整路径/usr/local/conquest/dgate
该软件附带了 Debian 系统的初始化脚本,因此该脚本使用start-stop-daemon
,并选择--chdir
dgate 的位置,但我还没有找到使用 Redhat 守护进程功能执行此操作的方法。
答案1
为什么不只是:
daemon --user mruser ${CONQ_DIR}/dgate -v
?
编辑:
cd ${CONQ_DIR} && daemon --user mruser ./dgate -v &
答案2
set -x
老问题还是老问题:您可以使用脚本顶部的 (xtrace)来解决此类问题。另外,请考虑set -e
,以便尽早排除脚本错误。
答案3
dgate文件有执行权限吗?
在启动 dgate 之前尝试回显当前目录 (echo `pwd`)。
此致敬礼,洛伦佐。
答案4
export CONQ_DIR 子 shell 不知道该目录。
例如
$ FOO=skhfkjsdh
$ cat foo.sh
echo $FOO
$ sh foo.sh
$ export FOO=skhfkjsdh
$ sh foo.sh
skhfkjsdh
$