Lansman Daemon'um 0 statüsü döndürmesine rağmen çalışmıyor


1

Bazı nedenlerden dolayı, oluşturduğum lansman arka planı sistem önyüklemesinde başarıyla çalışmayacak. Bir lansman ajanı olarak denedim ama bu da işe yaramadı.

Bu, benim / Library / LaunchDaemons dizinindeki pistim:

<?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>

İlginçtir, komut dosyası elle çalıştırılırsa doğru çalışır, sadece arka plandaki program aracılığıyla değil. Ve açılıştan sonra launchctl listesini çalıştırırken, com.inetmac4.status için durum 0'dır, fakat script hiç çalışmadı.

Herhangi bir yardım çok takdir edilecektir! Googled'im ama buradaki çözümlerin hiçbiri benim için işe yaramadı.

EDIT: 10.8.5’de Mac Pro’da çalıştırmaya çalıştığım belirtilmelidir.

EDIT2: Ve senaryo:

`#!/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

ve 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);

Vmstatus_startup'ta neler var? çatal mı?
Mark

Komut dosyası @Mark ile düzenlenmiş , yüklü sanal makinelerin durumunu yenileyip bunları bir html dosyasına gönderen bir kabuk betiği çağırması gerekiyor. Sadece bir terminal penceresindeki yürütülebilir dosyayı çağırarak çalışır ... Teşekkürler!
Tyler

Bunu soruya koyabilir ve okunabilir hale getirebilir misin
Mark

Hiç sorun değil, ne kadar zayıf biçimlendirileceğini anlamadı.
Tyler

1
VM.sh'yi .plish'de olması gerektiği gibi görmeliyiz - tüm borular vb .plist'te yapılmalı, kabuk betiğinde değil. Ayrıca, fırlatma ajanı kullanılmaması gerektiğini sanmıyorum
Mark

Yanıtlar:


2

Yorumları okumak istemeyenler için, Mark bana biraz fikir verdikten sonra oldukça basit bir düzeltme yapıldı.

Başlangıçta, vmstatus_startup betiğini VM.sh'yi çağırmak için yazdım, ardından perl betiğini sürekli yenileyeceğim (her 5 saniyede bir). Shell betiğini sadece karmaşıklık katmanları ekleyen launchctl'den çağırmaya çalışıyordum.

Bunun yerine, perl komut dosyasını doğrudan .plist'ten çağırmak ve canlı tutma anahtarını vermek, önyüklemeden sonra sürekli çalışmasına izin verdi.

Son olarak, perl dizinini betiğin bulunduğu yerin üstündeki .plistesine eklediğimden emin olmam gerekiyordu çünkü piyasaya sürülen bir kullanıcı bir PATH'a sahip değildi.


0

<key>RunAtLoad</key><true/>İş yüklendiğinde (veya giriş yaparken) programı çalıştırmak için eklemeniz gerekir . Bakınız 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.

Sonlandırıldığında programın tekrar çalıştırılmasını istiyorsanız, KeepAlivetrue olarak ayarlayın .

Bir plise değişiklikleri boşaltarak ve yükleyerek uygulayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.