1 votos

Mi Lanzamiento Demonio no funciona a pesar de la devolución de un 0 estado

Por alguna razón, el lanzamiento de demonio que he creado no se ejecutará correctamente en el arranque del sistema. Lo he probado como el lanzamiento de un agente, sino que también no funciona.

Este es mi plist que se encuentra en /Library/LaunchDaemons:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.inetmac4.status</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/Users/inetmac4/script/VMSTATUS/vmstatus_startup</string>
    </array>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

Curiosamente, el script no se ejecuta correctamente si se ejecuta manualmente, no sólo a través de la demonio. Y cuando se ejecuta launchctl lista después del arranque, el estado de com.inetmac4.el estado es 0, pero el guión no parece que se haya ejecutado.

Cualquier ayuda sería muy apreciada! He buscado en Google pero ninguna de las soluciones por ahí que he encontrado que va a trabajar para mí.

EDIT: cabe señalar que estoy tratando de instalarlo en un Mac Pro en 10.8.5

EDIT2: Y la secuencia de comandos:

`#!/bin/bash
#cd /Users/inetmac4/
#python -m SimpleHTTPServer > ~/outfile 2> ~/errfile < /dev/null & disown
cd /Users/inetmac4/Script/VMSTATUS/
./VM.sh  > ~/outfile 2> ~/errfile < /dev/null & disown`

VM.sh:

#!/bin/sh

#  VM.sh
#  
#
#  Created by INETMac4 on 9/12/13.
#
COUNTER=0

while [  1 ]; do

    perl VM_STATUS.pl
    let COUNTER=COUNTER+1
    sleep 5
done

y VM_STATUS.pl:

#!/usr/bin/perl
use Data::Dumper;

#-- the same command in list context



    my @result = `prlctl list --all`;

    shift @result;
    open (VMSTATUS, '>/Users/inetmac4/Sites/index.html');
    open (USERLOG, '</Users/inetmac4/script/username_log.txt');

    my @user_log = <USERLOG>;
    my @user_log = reverse(@user_log); 
    my @user_status;

    my %hash = ();
    foreach (@user_log){

        my @values = split(/\\/), $_;

        my $computer_name = $values[1];

        if (exists($hash{ $computer_name }) == 0){
            $hash{ $computer_name } = 'true';
            push(@user_status, $_);
        }

    }

    my @user_status_formatted;
    # Replaces domain name with OS type
    foreach (@user_status){
        my @values = split(/\\/), $_;

        if ($values[1] =~ /PSSTEAM-W7VPC/){
            push(@user_status_formatted, $values[0] . '\\' . "Windows 7" . '\\' . $values[2]. '\\' . $values[3])
        }
        if ($values[1] =~ /PSSTEAM-W8VPC/){
            push(@user_status_formatted, $values[0] . '\\' . "Windows 8" . '\\' . $values[2]. '\\' . $values[3])
        }
        if ($values[1] =~ /PSSTEAM-XPVPC/){
            push(@user_status_formatted, $values[0] . '\\' . "Windows XP" . '\\'. $values[2]. '\\' . $values[3])
        }

    }
    #print Dumper %hash;

    #print @result;

    foreach (@result){

        my @columns = split(/\s+/), $_;
        my $name  = $columns[3]." ".$columns[4];
        print VMSTATUS "<b>Virtual Machine: </b>". '<a href="VM_Start_INETMAC4_Windows7.cgi">'.$name."</a></br>\n";
        print VMSTATUS "<b>STATUS:</b> ". $columns[1]."</br>\n";
        if ($name =~ 'Windows 8.1'){
            print VMSTATUS "</br>\n";
        }
        foreach (@user_status_formatted){
            my @values = split(/\\/), $_;

            if ($values[0] =~ 'LOGGEDOUT' && $values[1] =~ $name){
                print VMSTATUS "<b>User:</b> Loggedout/ No user"."\n</br></br>";
                last;
            }
            if ($values[1] =~ $name){
                print VMSTATUS "<b>User: </b>  " . $values[2] . "\\" . $values[3]."\n</br></br>";
            }

        }
        print VMSTATUS "<hr>";
    }

    close (VMSTATUS);

2voto

Ben Cuilcagh Puntos 61

Para aquellos que no quieren leer a través de los comentarios, se trata de un bonito solución simple, después de que Mark me dio un poco de perspicacia.

Al principio, me escribió el vmstatus_startup script para llamar VM.sh que luego continuamente actualizar el script de perl (cada 5 segundos). Yo estaba tratando de llamar a la secuencia de comandos de shell de launchctl que sólo añade capas de complejidad.

En su lugar, llamar a la secuencia de comandos perl directamente desde el .plist y dar el mantener viva clave permite que se ejecute constantemente después del arranque.

Finalmente, tuve que asegúrese de agregar el perl directorio .plist sobre la ubicación de la secuencia de comandos, ya launchd doens no tiene una RUTA de acceso de la misma manera que un usuario hace.

0voto

Usted necesita agregar <key>RunAtLoad</key><true/> a ejecutar el programa cuando el trabajo está cargado (o en el inicio de sesión). Ver man launchd.plist:

RunAtLoad <boolean>
This optional key is used to control whether your job is launched once at
the time the job is loaded. The default is false.

Si desea que el programa se corrió de nuevo, si se termina, también se establece KeepAlive a true.

Usted puede aplicar los cambios a un plist por carga y descarga.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X