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

Скрипт автозагрузки нового типа

Добавлено: 2011-01-14 2:17:39
d15b200
Уважаемые гуру, уже инет облазил и с такой кашей в голове окончательно запутался.
Короче мне нужно стартовать скрипт (Perl) как демон, и работать с ним как с сервисом.
У меня команда onestart проходит, а вот onestatus нет... даже не создаётся файл .pid
Уже опустился до простого скрипта, не перла, и та же проблема.

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

# ll /usr/local/etc/rc.d/utility
-r-xr-xr-x  1 root  wheel  350 Jan 13 09:21 /usr/local/etc/rc.d/utility

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

#!/bin/sh
#
# $FreeBSD
#

# PROVIDE: utility
# REQUIRE: LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name="utility"
rcvar=`set_rcvar`
command="/usr/local/sbin/${name}"
load_rc_config $name
pidfile="/var/run/${name}.pid"
start_cmd="daemon -f ${command}"


run_rc_command "$1"

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

# ll /usr/local/sbin/utility
-r-xr-xr-x  1 root  wheel  148 Jan 13 09:16 /usr/local/sbin/utility

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

#!/bin/sh
#
# $FreeBSD
#
echo "sleeping 2"
sleep 2
echo "sleeping 10"
sleep 10
exit 0

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

# /usr/local/etc/rc.d/utility onestart
# cat /var/run/utility.pid
cat: /var/run/utility.pid: No such file or directory
# /usr/local/etc/rc.d/utility onestatus
utility is not running.
# ps -ax | grep utility
 9885  ??  Ss     0:00.00 /bin/sh /usr/local/sbin/utility
# ps -ax | grep utility
Интересует именно не .sh а через rc.subr
моё чтиво
Руководство FreeBSD 11.5. Запуск сервисов
FreeBSD Man Pages RC.SUBR(8)

Re: Скрипт автозагрузки нового типа

Добавлено: 2011-01-14 3:56:15
FreeBSP
добавь к чтиву /etc/rc.subr
еще можешь попробовать самостоятельно реализовать команду stаtus определив

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

ststus_cmd="supercomand"; 
supercomand() { 
echo 42
}
вроде так
читай не только ман по рц.субр, но и его самого

Re: Скрипт автозагрузки нового типа

Добавлено: 2011-01-14 7:34:47
spf
Работающий вариант перлового демона как сервиса:

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

#!/bin/sh

# PROVIDE: sysadmd
# REQUIRE: NETWORKING SERVERS
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable sysadmd:
#
# sysadmd_enable="YES"
#

. /etc/rc.subr

name=sysadmd
rcvar=`set_rcvar`
pidfile=/var/run/${name}.pid
command="/usr/local/sbin/${name}"
command_interpreter="/usr/local/bin/perl"

load_rc_config $name
run_rc_command "$1"
Демон должен сам позаботится о pid-файле. Например, так:

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

#!/usr/local/bin/perl

use strict;

my $PIDFILE = '/var/run/sysadmd.pid';
.....
.....
# Станем демоном
my $pid = fork ();
exit (0) if $pid;
die "Can't fork: $!" unless defined $pid;
setsid() or die "Can't start a new session: $!";

# Демон должен быть один
if (-s $PIDFILE) {                                                              
        open (FILE, $PIDFILE) or die "Can't open $PIDFILE: $!";                
        chomp ($pid = <FILE>);                                                 
        close (FILE);                                                          
                                                                               
        if (kill (0, $pid)) {
                die "Daemon already works";
        }
}
open (FILE, "> $PIDFILE") or die "Can't open $PIDFILE: $!";
print FILE $$, "\n";
close (FILE);
.......
.......