PLD Linux Forum Strona Główna PLD Linux Forum
Oficjalne forum dystrybucji PLD Linux

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj

Poprzedni temat «» Następny temat
problem z aplikacja
Autor Wiadomość
mkiler 

Dołączył: 01 Lut 2007
Posty: 17
Wysłany: 18 Listopad 2007, 20:33   problem z aplikacja

Hej
Walcze z zoneminder (aplikacja do kamer), przebrnalem przez konfiguracje i instalacje. Mam problem przy odpalaniu skryptu startujacego program.

gdy zrobie:
Kod:
 ./zm start


dostaje blad:

    $Starting ZoneMinder: sh: >&/dev/null : illegal file descriptor name
    ./zm[112]: failure: not found


Dobrze mysle ze to 112 to jest numer lini w tym pliku? Jesli tak to wyglada ona tak:

    esac
    $RETVAL

gdzie $retval jest ostatnia linia a wczesniej sa case do wyboru (plik wyglada tak jak skrypty sluzace do uruchamiania aplikacji w pld przez chkconfig)

Pytanie o co mu chodzi?
 
 
 
KrystianT 

Distro: PLD 3.0
Pomógł: 189 razy
Dołączył: 26 Paź 2005
Posty: 1920
Skąd: Kamionek
Wysłany: 18 Listopad 2007, 23:04   

mkiler napisał/a:
sh: >&/dev/null : illegal file descriptor name
A to >&/dev/null nie jest przypadkiem jakimś bashizmem? Może wystarczy ma początku skryptu dać #!/bin/bash
Albo coś, co widzę w pld-owych skryptach >/dev/null 2>&1
_________________
Krystian T.
"Errare humanum est."
 
 
mkiler 

Dołączył: 01 Lut 2007
Posty: 17
Wysłany: 20 Listopad 2007, 20:14   

Zmienilem poczatek z sh na bash i jest tak samo.



skrypt wyglada tak:

Kod:

#!/bin/sh
# description: ZoneMinder is the top Linux video camera security and surveillanc                                         e solution. ZoneMinder is intended for use in single or multi-camera video secur                                         ity applications.Copyright: Philip Coombes, Corey DeLasaux 2003-2006
# chkconfig: 2345 99 00
# processname: zmpkg.pl

# Source function library.
. /etc/rc.d/init.d/functions

prog=ZoneMinder
ZM_CONFIG="/usr/local/etc/zm.conf"
pidfile="/var/run/zm"
LOCKFILE=/var/lock/subsys/zm

loadconf()
{
        if [ -f $ZM_CONFIG ]; then
                . $ZM_CONFIG
        else
                echo "ERROR: $ZM_CONFIG not found."
                return 1
        fi
}

loadconf
command="$ZM_PATH_BIN/zmpkg.pl"

start()
{
        zmupdate || return $?
        loadconf || return $?
        #Make sure the directory for our PID folder exists or create one.
        [ ! -d /var/run/zm ] \
                && mkdir -m 774 $pidfile \
                && chown $ZM_WEB_USER:$ZM_WEB_GROUP $pidfile
        #Make sure the folder for the socks file exists or create one
        GetPath="select Value from Config where Name='ZM_PATH_SOCKS'"
        ZM_PATH_SOCK=`echo $GetPath | mysql -B -h $ZM_DB_HOST -u $ZM_DB_USER -p$                                         ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'`
        [ ! -d $ZM_PATH_SOCK ] \
                && mkdir -m 774 $ZM_PATH_SOCK \
                && chown $ZM_WEB_USER:$ZM_WEB_GROUP $ZM_PATH_SOCK
        echo -n $"Starting $prog: "
        $command start
        RETVAL=$?
        [ $RETVAL = 0 ] && success || failure
        echo
        [ $RETVAL = 0 ] && touch $LOCKFILE
        return $RETVAL
}

stop()
{
        loadconf
        echo -n $"Stopping $prog: "
        $command stop
        RETVAL=$?
        [ $RETVAL = 0 ] && success || failure
        echo
        [ $RETVAL = 0 ] && rm -f $LOCKFILE
}

zmstatus()
{
        loadconf
        result=`$command status`
        if [ "$result" = "running" ]; then
                echo "ZoneMinder is running"
                $ZM_PATH_BIN/zmu -l
                RETVAL=0
        else
                echo "ZoneMinder is stopped"
                RETVAL=1
        fi
}

zmupdate()
{
        if [ -x $ZM_PATH_BIN/zm_update ]; then
                $ZM_PATH_BIN/zm_update noi
        fi
}


case "$1" in
        'start')
                start
                ;;
        'stop')
                stop
                ;;
        'restart')
                stop
                start
                ;;
        'condrestart')
                loadconf
                result=`$ZM_PATH_BIN/zmdc.pl check`
                if [ "$result" = "running" ]; then
                        $ZM_PATH_BIN/zmdc.pl shutdown > /dev/null
                        rm -f $LOCKFILE
                        start
                fi
                ;;
        'status')
                status httpd
                status mysqld
                zmstatus
                ;;
        *)
                echo "Usage: $0 { start | stop | restart | condrestart | status                                          }"
                RETVAL=1
                ;;
esac
exit $RETVAL
 
 
 
KrystianT 

Distro: PLD 3.0
Pomógł: 189 razy
Dołączył: 26 Paź 2005
Posty: 1920
Skąd: Kamionek
Wysłany: 20 Listopad 2007, 21:10   

Cytat:
[ $RETVAL = 0 ] && success || failure
To mu się nie podoba. Co to za polecenia "success" i "failure"? Może gdybyś zmienił to np. na
Kod:
[ $RETVAL = 0 ] && echo 'success' || echo 'failure'
to by zadziałało...
_________________
Krystian T.
"Errare humanum est."
 
 
mkiler 

Dołączył: 01 Lut 2007
Posty: 17
Wysłany: 20 Listopad 2007, 21:21   

no nie wiem
zmienilem w 2 miejscach i jest tak ze cos chyba wstaje bo w procesach pojawiaja sie jakies rzeczy nalezace do pakietu ale blad jest ten sam z tym ze na koniec pisze success

Kod:

$Starting ZoneMinder: sh: >&/dev/null : illegal file descriptor name
success

 
 
 
shadzik 


Pomógł: 128 razy
Dołączył: 08 Lip 2005
Posty: 1773
Skąd: Berlin
Wysłany: 20 Listopad 2007, 21:26   

mkiler napisał/a:
[ ! -d $ZM_PATH_SOCK ] \
&& mkdir -m 774 $ZM_PATH_SOCK \


Powiedz mi co to za twory? Albo nowa linia albo &&, \ i && się raczej nie znoszą. Po poprawieniu tego ja mam czysto:

[shadzik@carme-pld ~]$ ./bzudrz
ERROR: /usr/local/etc/zm.conf not found.
Usage: ./bzudrz { start | stop | restart | condrestart | status
}
[shadzik@carme-pld ~]$ ./bzudrz start
ERROR: /usr/local/etc/zm.conf not found.
ERROR: /usr/local/etc/zm.conf not found.

Te ERRORY u mnie można olać.
_________________
checking for beer in -lfridge... no
Warning: No beer found in fridge!
We highly suggest that you rectify this situation immediately.
 
 
mkiler 

Dołączył: 01 Lut 2007
Posty: 17
Wysłany: 20 Listopad 2007, 21:37   

ja nie wiem co to :) mam bardzo male pojecie o skryptach
generalnie ten skrypt zostal wygenerowany przez konfigurator tej aplikacji i powstal podczas procesu instalacji

blad jest inny teraz:

Kod:

./zm[110]: [: missing ]
./zm[110]: [: missing ]
$Starting ZoneMinder: sh: >&/dev/null : illegal file descriptor name
failure



wiedzialem ze zainstalowanie tego nie bedzie proste ale nie myslalem ze zajmie mi kilka dni a na koniec przed samym finalem stanie :(
 
 
 
mkiler 

Dołączył: 01 Lut 2007
Posty: 17
Wysłany: 20 Listopad 2007, 21:47   

tak wyglada zmpkg.pl

Kod:

#!/usr/bin/perl -wT
#
# ==========================================================================
#
# ZoneMinder Package Control Script, $Date: 2006/10/20 09:31:40 $, $Revision: 1.17 $
# Copyright (C) 2003, 2004, 2005, 2006  Philip Coombes
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
# ==========================================================================
#
# This script is used to start and stop the ZoneMinder package primarily to
# allow command line control for automatic restart on reboot (see zm script)
#
use strict;
use bytes;

# ==========================================================================
#
# These are the elements you can edit to suit your installation
#
# ==========================================================================

use constant DBG_ID => "zmpkg"; # Tag that appears in debug to identify source
use constant DBG_LEVEL => 0; # 0 is errors, warnings and info only, > 0 for debug

# ==========================================================================
#
# Don't change anything below here
#
# ==========================================================================

use ZoneMinder;
use DBI;
use POSIX;
use Time::HiRes qw/gettimeofday/;

# Detaint our environment
$ENV{PATH}  = '/bin:/usr/bin';
$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL};
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};

zmDbgInit( DBG_ID, level=>DBG_LEVEL );

my $command = $ARGV[0];

my $state;

my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS );

if ( !$command || $command !~ /^(?:start|stop|restart|status|logrot)$/ )
{
    if ( $command )
    {
        # Check to see if it's a valid run state
        my $sql = "select * from States where Name = '$command'";
        my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() );
        my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() );
        if ( $state = $sth->fetchrow_hashref() )
        {
            $state->{Name} = $command;
            $state->{Definitions} = [];
            foreach( split( ',', $state->{Definition} ) )
            {
                my ( $id, $function, $enabled ) = split( ':', $_ );
                push( @{$state->{Definitions}}, { Id=>$id, Function=>$function, Enabled=>$enabled } );
            }
            $command = 'state';
        }
        else
        {
            $command = undef;
        }
    }
    if ( !$command )
    {
        print( "Usage: zmpkg.pl <start|stop|restart|status|logrot|'state'>\n" );
        exit( -1 );
    }
}

# Move to the right place
chdir( ZM_PATH_WEB ) or Fatal( "Can't chdir to '".ZM_PATH_WEB."': $!" );

my $dbg_id = "";

Info( "Command: $command\n" );

my $retval = 0;

# Determine the appropriate syntax for the su command

my ( $cmd_prefix, $cmd_suffix ) = getCmdFormat();

if ( $command eq "state" )
{
    Info( "Updating DB: $state->{Name}\n" );
    my $sql = "select * from Monitors order by Id asc";
    my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() );
    my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() );
    while( my $monitor = $sth->fetchrow_hashref() )
    {
        foreach my $definition ( @{$state->{Definitions}} )
        {
            if ( $monitor->{Id} =~ /^$definition->{Id}$/ )
            {
                $monitor->{NewFunction} = $definition->{Function};
                $monitor->{NewEnabled} = $definition->{Enabled};
            }
        }
        #next if ( !$monitor->{NewFunction} );
        $monitor->{NewFunction} = 'None' if ( !$monitor->{NewFunction} );
        $monitor->{NewEnabled} = 0 if ( !$monitor->{Enabled} );
        if ( $monitor->{Function} ne $monitor->{NewFunction} || $monitor->{Enabled} ne $monitor->{NewEnabled} )
        {
            my $sql = "update Monitors set Function = ?, Enabled = ? where Id = ?";
            my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() );
            my $res = $sth->execute( $monitor->{NewFunction}, $monitor->{NewEnabled}, $monitor->{Id} ) or Fatal( "Can't execute: ".$sth->errstr() );
        }
    }
    $sth->finish();

    $command = "restart";
}

if ( $command =~ /^(?:stop|restart)$/ )
{
    my $status = runCommand( "zmdc.pl check" );

    if ( $status eq "running" )
    {
        runCommand( "zmdc.pl shutdown" );
        removeShm();
    }
    else
    {
        $retval = 1;
    }
}

if ( $command =~ /^(?:start|restart)$/ )
{
    my $status = runCommand( "zmdc.pl check" );

    if ( $status eq "stopped" )
    {
        removeShm();
        runCommand( "zmfix" );
        runCommand( "zmdc.pl startup" );

        my $sql = "select * from Monitors";
        my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() );
        my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() );
        while( my $monitor = $sth->fetchrow_hashref() )
        {
            if ( $monitor->{Function} ne 'None' )
            {
                if ( $monitor->{Type} eq 'Local' )
                {
                    runCommand( "zmdc.pl start zmc -d $monitor->{Device}" );
                }
                else
                {
                    runCommand( "zmdc.pl start zmc -m $monitor->{Id}" );
                }
                if ( $monitor->{Function} ne 'Monitor' )
                {
                    if ( ZM_OPT_FRAME_SERVER )
                    {
                        runCommand( "zmdc.pl start zmf -m $monitor->{Id}" );
                    }
                    runCommand( "zmdc.pl start zma -m $monitor->{Id}" );
                }
                if ( ZM_OPT_CONTROL )
                {
                    if ( $monitor->{Function} eq 'Modect' || $monitor->{Function} eq 'Mocord' )
                    {
                        if ( $monitor->{Controllable} && $monitor->{TrackMotion} )
                        {
                            runCommand( "zmdc.pl start zmtrack.pl -m $monitor->{Id}" );
                        }
                    }
                }
            }
        }
        $sth->finish();

        # This is now started unconditionally
        runCommand( "zmdc.pl start zmfilter.pl" );
        if ( ZM_RUN_AUDIT )
        {
            runCommand( "zmdc.pl start zmaudit.pl -c" );
        }
        if ( ZM_OPT_TRIGGERS )
        {
            runCommand( "zmdc.pl start zmtrigger.pl" );
        }
        if ( ZM_OPT_X10 )
        {
            runCommand( "zmdc.pl start zmx10.pl -c start" );
        }
        runCommand( "zmdc.pl start zmwatch.pl" );
        if ( ZM_CHECK_FOR_UPDATES )
        {
            runCommand( "zmdc.pl start zmupdate.pl -c" );
        }
    }
    else
    {
        $retval = 1;
    }
}

if ( $command eq "status" )
{
    my $status = runCommand( "zmdc.pl check" );

    print( STDOUT $status."\n" );
}

if ( $command eq "logrot" )
{
    runCommand( "zmdc.pl logrot" );
}

exit( $retval );

sub getCmdFormat
{
    Debug( "Testing valid shell syntax\n" );

    my ( $name ) = getpwuid( $> );
    if ( $name eq ZM_WEB_USER )
    {
        Debug( "Running as '$name', su commands not needed\n" );
        return( "" );
    }

    my $null_command = "true";

    my $prefix = "sudo -u ".ZM_WEB_USER." ";
    my $suffix = "";
    my $command = $prefix.$null_command.$suffix;
    Debug( "Testing \"$command\"\n" );
    $command .= " >& /dev/null";
    my $output = qx($command);
    my $status = $? >> 8;
    if ( !$status )
    {
        Debug( "Test ok, using format \"$prefix<command>$suffix\"\n" );
        return( $prefix, $suffix );
    }
    else
    {
        chomp( $output );
        Debug( "Test failed, '$output'\n" );

        $prefix = "su ".ZM_WEB_USER." --shell=/bin/sh --command='";
        $suffix = "'";
        $command = $prefix.$null_command.$suffix;
        Debug( "Testing \"$command\"\n" );
        my $output = qx($command);
        my $status = $? >> 8;
        if ( !$status )
        {
            Debug( "Test ok, using format \"$prefix<command>$suffix\"\n" );
            return( $prefix, $suffix );
        }
        else
        {
            chomp( $output );
            Debug( "Test failed, '$output'\n" );

            $prefix = "su ".ZM_WEB_USER." -c '";
            $suffix = "'";
            $command = $prefix.$null_command.$suffix;
            Debug( "Testing \"$command\"\n" );
            $output = qx($command);
            $status = $? >> 8;
            if ( !$status )
            {
                Debug( "Test ok, using format \"$prefix<command>$suffix\"\n" );
                return( $prefix, $suffix );
            }
            else
            {
                chomp( $output );
                Debug( "Test failed, '$output'\n" );
            }
        }
    }
    Error( "Unable to find valid 'su' syntax\n" );
    exit( -1 );
}

sub removeShm
{
    Debug( "Removing shared memory\n" );
    # Find ZoneMinder shared memory
    my $command = "ipcs -m | grep '^".substr( sprintf( "0x%x", hex(ZM_SHM_KEY) ), 0, -2 )."'";
    Debug( "Checking for shared memory with '$command'\n" );
    open( CMD, "$command |" ) or Fatal( "Can't execute '$command': $!" );
    while( <CMD> )
    {
        chomp;
        my ( $key, $id ) = split( /\s+/ );
        if ( $id =~ /^(\d+)/ )
        {
            $id = $1;
            $command = "ipcrm shm $id";
            Debug( "Removing shared memory with '$command'\n" );
            qx( $command );
        }
    }
    close( CMD );
}

sub runCommand
{
    my $command = shift;
    $command = ZM_PATH_BIN."/".$command;
    if ( $cmd_prefix )
    {
        $command = $cmd_prefix.$command.$cmd_suffix;
    }
    Debug( "Command: $command\n" );
    my $output = qx($command);
    my $status = $? >> 8;
    chomp( $output );
    if ( $status || DBG_LEVEL > 0 )
    {
        if ( $status )
        {
            Error( "Unable to run \"$command\", output is \"$output\"\n" );
            exit( -1 );
        }
        else
        {
            Debug( "Output: $output\n" );
        }
    }
    return( $output );
}
 
 
 
KrystianT 

Distro: PLD 3.0
Pomógł: 189 razy
Dołączył: 26 Paź 2005
Posty: 1920
Skąd: Kamionek
Wysłany: 20 Listopad 2007, 21:50   

mkiler napisał/a:
>&/dev/null
Już ci raz pisałem, że to jest chyba bashizm. Teraz jestem tego pewny, bo google naprowadziło mnie na maila glena, że takie coś trzeba zmienić na:
Kod:
>/dev/null 2>&1

W zaprezentowanym przez ciebie skrypcie tego >&/dev/null nigdzie nie widzę...
Konstrukcja
Kod:
[ $RETVAL = 0 ] && success || failure
znaczy wykonaj polecenie "success" jeżeli [ $RETVAL = 0 ] zakończy się powodzeniem lub wykonaj polecenie "failure" a już wcześniej nie bez powodu pytałem co to ma być ten "success" i "failure", dlatego sugerowałem dodanie "echo" żeby było jakieś polecenie...
shadzik napisał/a:
Powiedz mi co to za twory? Albo nowa linia albo &&
Przecież to jednolinijkowe polecenie zapisane w łamanym wierszu...
 
 
mkiler 

Dołączył: 01 Lut 2007
Posty: 17
Wysłany: 20 Listopad 2007, 22:00   

wiec jak zmienilem na bash to komunikat byl taki sam:

Kod:
$Starting ZoneMinder: sh: >&/dev/null : illegal file descriptor name



jak dopisalem echo to pisze ze

Kod:

$Starting ZoneMinder: sh: >&/dev/null : illegal file descriptor name
success


tak jak mowie w tle startuja jakies uslugi z tym zwiazane ale nie startuje ta glowna
 
 
 
KrystianT 

Distro: PLD 3.0
Pomógł: 189 razy
Dołączył: 26 Paź 2005
Posty: 1920
Skąd: Kamionek
Wysłany: 20 Listopad 2007, 22:04   

mkiler napisał/a:
blad jest inny teraz
Jeśli możesz to zainstaluj od nowa żeby mieć oryginalne pliki (prawdopodobnie podczas kombinacji niechcący coś wyedytowałeś)
Jak będziesz miał oryginalne pliki to zmień tylko >&/dev/null na >/dev/null 2>&1 i obie linijki[ $RETVAL = 0 ] && success || failure na [ $RETVAL = 0 ] && echo 'success' || echo 'failure'
I IMO powinno być dobrze.
_________________
Krystian T.
"Errare humanum est."
 
 
KrystianT 

Distro: PLD 3.0
Pomógł: 189 razy
Dołączył: 26 Paź 2005
Posty: 1920
Skąd: Kamionek
Wysłany: 20 Listopad 2007, 22:07   

mkiler napisał/a:
jak dopisalem echo to pisze ze
Kod:
$Starting ZoneMinder: sh: >&/dev/null : illegal file descriptor name
success

tak jak mowie w tle startuja jakies uslugi z tym zwiazane ale nie startuje ta glowna

Bo konstrukcja >&/dev/null działa bodajże w csh a w pld jest ksh. Zamień jak prosiłem później na >/dev/null 2>&1

A tak w ogóle jak to instalowałeś, bo w cvsie widzę, że jest zm.spec do budowania tego pakietu pod pld...
Ostatnio zmieniony przez KrystianT 20 Listopad 2007, 22:19, w całości zmieniany 1 raz  
 
 
mkiler 

Dołączył: 01 Lut 2007
Posty: 17
Wysłany: 20 Listopad 2007, 22:13   

zmienilem i nadal to samo
 
 
 
KrystianT 

Distro: PLD 3.0
Pomógł: 189 razy
Dołączył: 26 Paź 2005
Posty: 1920
Skąd: Kamionek
Wysłany: 20 Listopad 2007, 22:25   

mkiler napisał/a:
to samo
to znaczy...?
_________________
Krystian T.
"Errare humanum est."
 
 
mkiler 

Dołączył: 01 Lut 2007
Posty: 17
Wysłany: 20 Listopad 2007, 22:29   

Kod:

$Starting ZoneMinder: sh: >&/dev/null : illegal file descriptor name
success
 
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group