Страница 1 из 1

Perl daemon name

Добавлено: 2014-03-13 12:43:17
harmless
Добрый день, товарищи!
есть dhcp сервер написанный на perl, при работе в процессах он значиться как

Код: Выделить всё

пользователь perl pid и т.д.
Вопрос - как задать имя демона чтоб он в процессах числился как dhcpd?

Re: Perl daemon name

Добавлено: 2014-03-13 15:20:43
ChihPih
Ищите на странице фразу $PROGRAM_NAME .

Re: Perl daemon name

Добавлено: 2014-03-13 15:53:21
harmless
Сюдя из описаного там в BSD не получиться этого сделать(
не могу понять почему sa-spamd rc-скрипт определяет что запущен демон, а у меня нет(

Re: Perl daemon name

Добавлено: 2014-03-13 16:46:52
ChihPih
Проверяет существование файла, который создается заранее запускаемым процессом?

Re: Perl daemon name

Добавлено: 2014-03-13 16:52:55
harmless
ChihPih писал(а):Проверяет существование файла, который создается заранее запускаемым процессом?
Не совсем понял
Вот rc-script запуска демона

Код: Выделить всё

#!/bin/sh

# PROVIDE: dhcpd
# REQUIRE: DAEMON mysql
# KEYWORD: shutdown


. /etc/rc.subr

name="dhcpd"
rcvar="dhcpd_enable"

load_rc_config $name

: ${dhcpd_enable="NO"}
: ${dhcpd_pidfile="/var/run/${name}.pid"}

pidfile=${dhcpd_pidfile:-"/var/run/${name}.pid"}

command=/usr/local/sbin/${name}.pl
command_args="-p ${pidfile} "

start_precmd="${name}_prestart"

dhcpd_prestart() {
	. /usr/local/etc/dhcpd/dhcpd.conf ;

	if [ -z "${id}" ]; then
		err 1 "Please specify id with id parameter in /usr/local/etc/dhcpd/dhcpd.conf";
	fi
	command_args="${command_args} -id ${id}";
	
	if [ -z "${threads}" ]; then
		err 1 "Please specify num of threads with threads parameter in /usr/local/etc/dhcpd/dhcpd.conf";
	fi
	command_args="${command_args} -t ${threads}";
	
	if [ -z "${ip}" ]; then
		err 1 "Please specify ip with ip parameter in /usr/local/etc/dhcpd/dhcpd.conf";
	fi
	command_args="${command_args} -b ${ip}";

	if [ -z "${port}" ]; then
		err 1 "Please specify port number with port parameter in /usr/local/etc/dhcpd/dhcpd.conf";
	fi
	command_args="${command_args} -sp ${port}";

	if [ -z "${client_port}" ]; then
		err 1 "Please specify client port number with client_port parameter in /usr/local/etc/dhcpd/dhcpd.conf";
	fi
	command_args="${command_args} -cp ${client_port}";
	
	if [ -n "${mirror}" ]; then
		command_args="${command_args} -m ${mirror}";
	fi

	if [ -z "${idn}" ]; then
		err 1 "Please specify db ident with idn parameter in /usr/local/etc/dhcpd/dhcpd.conf";
	fi
	command_args="${command_args} -dbs \"${idn}\"";

	if [ -n "${password}" ]; then
		command_args="${command_args} -dbp ${password}";
	fi
	if [ -n "${login}" ]; then
		command_args="${command_args} -dbl ${login}";
	fi

        if [ -n "${daemon}" ]; then
                command_args="${command_args} -d";
        fi

        if [ -n "${debug}" ]; then
                command_args="${command_args} -v ${debug}";
        fi
}

run_rc_command "$1"
Демон пишет всой пид в пид-файл, номер в файле совпадает с номером процесса, но

Код: Выделить всё

# /usr/local/etc/rc.d/dhcpd status
dhcpd is not running.
# cat /var/run/dhcpd.pid
3217
# sockstat | grep perl
root     perl5.16.3 2590  3  udp4   127.0.0.1:67          *:*
root     perl5.16.3 2590  4  tcp4   127.0.0.1:26271       127.0.0.1:3306
root     perl5.16.3 2590  5  tcp4   127.0.0.1:35000       127.0.0.1:3306
root     perl5.16.3 2590  6  tcp4   127.0.0.1:65519       127.0.0.1:3306
root     perl5.16.3 2590  7  stream -> /tmp/mysql.sock

Re: Perl daemon name

Добавлено: 2014-03-13 16:59:36
ChihPih
Ну вот например
pidfile=${dhcpd_pidfile:-"/var/run/${name}.pid"}
Файл с ID процесса. МОжно его проверять на существование (существует, значит запущен).
Это, кстати, должно по умолчанию работать, если скрипт запуска правильно написан

Re: Perl daemon name

Добавлено: 2014-03-13 17:05:53
harmless
ChihPih писал(а):Ну вот например
pidfile=${dhcpd_pidfile:-"/var/run/${name}.pid"}
Файл с ID процесса. МОжно его проверять на существование (существует, значит запущен).
Это, кстати, должно по умолчанию работать, если скрипт запуска правильно написан
Так в том то и дело что должен проверяться, но не проверяеться :st:
я так подозреваю что rc.subr проверяет наличие запущеного демона посредством ps -aux|grep $name

Re: Perl daemon name

Добавлено: 2014-03-13 17:26:15
harmless
Решение удивительное

Код: Выделить всё

command=/usr/local/sbin/${name}.pl
меняем на

Код: Выделить всё

command=/usr/local/sbin/${name}
и сам скрипт ложим без расширения, вот и все дела