Отправляет email-рассылки с помощью сервиса Sendsay

нужен `daemon` для gentoo

После перехода с RedHat 9.x на Gentoo появилась проблема с запуском
Tomcat как сервис. Система не может найти команду daemon, всё что дало
"emerge -s daemon" уже установил, но система так и не может найти этот
файл. Кто нибудь в курсе в каком пакете это может быть?

/etc/init.d/tomcatd
==================[покоцано]start() {
echo -n "Starting Tomcat: "
daemon $TOMCAT_START # <эта строчка
echo
touch /var/lock/subsys/tomcatd
}
==================[/покоцано]--
О своей скромности я могу говорить часами...
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 5437; Возраст листа: 236; Участников: 1059
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/106617



-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Igor Galchevsky Fri, 19 Mar 2004 21:33:33 +0200 (#106617)

 

Ответы:

On Fri, 19 Mar 2004, Igor Galchevsky wrote:

Не знаю в каком пакете, но делается это очень просто.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int
main(int argc, char *argv[])
{
if (argc < 2) {
fprintf(stderr, "usage: %s PROGRAM [ARGS]\n", argv[0]);
return 1;
}
if (fork() == 0) { /* child */
int fd;
fd = open("/dev/null", O_WRONLY);
dup2(1,fd);
dup2(2,fd);
close(1);
close(2);
execvp(argv[1], argv+1);
}
else /* parent */
return 0;
}
/* The end. */

mkb
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 5450; Возраст листа: 237; Участников: 1059
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/106726



-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Fri, 19 Mar 2004 02:03:35 +0300 (MSK) (#106726)

 

On Пятница 19 Март 2004 02:03, mkb wrote:

Строго говоря, этого недостаточно (а с файлами ещё и неправильно).
Нужно ещё стать process group leader. Правильнее, например, так:

if (fork())
return (0); // parent
setsid ();
if (fork())
return (0); // son
chdir ("/");
close (0);
close (1);
close (2);
open ("/dev/null", O_RDONLY); // fd = 0
open ("/dev/null", O_WRONLY); // fd = 1
open ("/dev/console", O_WRONLY); // fd = 2

Ответить   "Sergey B. Khvatov" Fri, 19 Mar 2004 10:41:57 +0300 (#106898)

 

On Fri, 19 Mar 2004, Sergey B. Khvatov wrote:

Да, насчет лидера это верно. Я запамятовал. Но дело было в 2:30 ночи
8-) А насчет файлов -- правильно, я только попутал местами аргументы
для dup2. А stdin можно и не перенаправлять.

Форкать второй раз не надо. И консоль открывать не обязательно.
Stderr нужно вообще в log файл складывать. Chdir делается по желанию.

Приняв во внимание все это (и /usr/src/lib/libc/gen/daemon.c из OBSD):

int
main(int argc, char *argv[])
{
if (argc < 2) {
fprintf(stderr, "usage: %s PROGRAM ARGS", argv[0]);
return 1;
}
if (fork() == 0) { /* child */
int fd;
if (setsid() == -1)
return (-1);
fd = open("/dev/null", O_RDWR, 0);
dup2(fd,1);
dup2(fd,2);
close(fd);
execvp(argv[1], argv+1);
}
else /* parent */
return 0;
}

mkb
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 5503; Возраст листа: 238; Участников: 1050
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/107701



-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Sat, 20 Mar 2004 02:05:06 +0300 (MSK) (#107701)

 

On Friday 19 March 2004 21:33, Igor Galchevsky wrote:

==================[покоцано]# A function to start a program.
daemon() {
# Test syntax.
local gotbase=
local base= user= nice= bg= pid
nicelevel=0
while [ "$1" != "${1##[-+]}" ]; do
case $1 in
'') gprintf "%s: Usage: daemon [+/-nicelevel] {program}\n" $0
return 1;;
--check)
base=$2
gotbase="yes"
shift 2
;;
--check=?*)
base=${1#--user=}
shift
;;
--user)
user=$2
shift 2
;;
--user=?*)
user=${1#--user=}
shift
;;
[-+][0-9]*)
nice="nice -n $1"
shift
;;
*) gprintf "%s: Usage: daemon [+/-nicelevel] {program}\n" $0
return 1;;
esac
done

# Save basename.
[ -z $gotbase ] && base=${1##*/}

# See if it's already running. Look *only* at the pid file.
pidlist=`pidfileofproc $base`

[ -n "$pid" ] && return

# make sure it doesn't core dump anywhere; while this could mask
# problems with the daemon, it also closes some security problems
ulimit -S -c 0 >/dev/null 2>&1

# And start it up.
if [ -z "$user" ]; then
$nice initlog $INITLOG_ARGS -c "$*"
else
$nice initlog $INITLOG_ARGS -c "su - $user -c \"$*\"" && success
"%s startup" $base || failure "%s startup" $base
fi
[ $? = 0 ] && success "%s startup" $base || failure "%s startup" $base
}
==================[/покоцано];))

Ответить   Fri, 19 Mar 2004 01:44:55 +0200 (#106736)

 

Фрагмент /etc/rc.d/init.d/functions:

# A function to start a program.
daemon()
{
# Test syntax.
local base=
local bg=
local gotbase=
local user=
local daemon_user=
local nicelevel=0
while [ "$1" != "${1##[-+]}" ]; do
case $1 in
--check)
shift
base=$1
gotbase=yes
shift
;;
--user)
shift
daemon_user=$1
shift
;;
--bg|--background)
bg='&'
shift
;;
[-+][0-9]*)
nicelevel=$1
shift
;;
'')
break
;;
*)
echo 'Usage: daemon [+/-nicelevel] {program}' >&2
return 1
;;
esac
done

# Save basename.
[ -n "$gotbase" ] || base="${1##*/}"

# See if it's already running.
local pidlist=`pidofproc "$1"`

local pid= p
for p in $pidlist; do
if checkpid "$p"; then
[ -z "$pid" ] && pid="$p" || pid="$pid $p"
fi
done

# Echo daemon
if [ "$BOOTUP" = "verbose" ]; then echo -n "$base "; fi

[ -z "$pid" ] || { echo_passed; return; }

# make sure it doesn't core dump anywhere; while this could mask
# problems with the daemon, it also closes some security problems
ulimit -Sc 0 &>/dev/null

# And start it up.
if [ -z "$daemon_user" ]; then
nice -n $nicelevel initlog $INITLOG_ARGS -n "$base" -c "sh -c '$*$bg'"
else
nice -n $nicelevel initlog $INITLOG_ARGS -n "$base" -c "su -s /bin/sh -l
$daemon_user -c '$*$bg'"
fi
[ $? = 0 ] && success "$base startup" || failure "$base startup"
}
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 5471; Возраст листа: 237; Участников: 1050
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/106938



-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   "Yuri N. Glibovetz" Fri, 19 Mar 2004 10:32:40 +0200 (#106938)