Я пытаюсь настроить сценарий инициализации для процесса в 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.
Старый вопрос все же старый: вы можете решить эту проблему с помощью set -x
(xtrace) вверху вашего скрипта. Также рассмотрите set -e
, поэтому скрипт выйдет из строя раньше.
Почему не просто:
daemon --user mruser ${CONQ_DIR}/dgate -v
?
Редактировать:
cd ${CONQ_DIR} && daemon --user mruser ./dgate -v &
Есть ли у файла dhgate разрешение на выполнение?
Попытайтесь повторить текущий каталог (echo `pwd`) перед запуском dhgate.
С уважением, Лоренцо.
export CONQ_DIR Подоболочка не знает о каталоге.
например
$ FOO=skhfkjsdh
$ cat foo.sh
echo $FOO
$ sh foo.sh
$ export FOO=skhfkjsdh
$ sh foo.sh
skhfkjsdh
$