nasıl kabuk komut dosyası Yosemite başlangıçta çalıştırmak için


21

Tahmin ettiğim başlangıç ​​öğeleri için Sistem / Kitaplık'ta bir dizin var: StartupItems

Yerel ağ adresi ve alt ağ maskesi ile başlangıçta ethernet arayüzünü yapılandıracak bir kabuk betiğine ihtiyacım var. Bunu yapmam gerekiyor çünkü ethernet arayüzünü konfigüre etmek için ağ tercihleri ​​manuel ayarları kullanarak ayarlayamaz. BU ciddi bir hata gibi görünüyor veya benim kurulum kötü.

Ağ kümesini komut satırından kullanmam önerildi, ancak ethernet arabirimini yapılandırmalar yeniden başlatma sırasında orada olacak şekilde yapılandırmayacak.

Komutun çalışmasını kök ayrıcalıklarıyla veya sudo ile yapması gerekiyor, ancak sudo kullanıyorsa, önyükleme işlemi o komut dosyasına ulaştığında önyükleme sırasında sunulan bir parola iletişim kutusu olacağını varsayıyorum.

(Terminalde yolumu bulmak için FreeBsd ve Linux ile yeterince deneyimim oldu, ancak Mac OSX için geçerli olduğu gibi değil)

Yanıtlar:


18

Bunu yapmanın bir yolu betiğe bir fırlatma servisi atamaktır:

Her zamanki gibi kabuk betiğini oluşturun. Ardından, başlangıçta çalıştırmak için bir başlatma servisi yapabilirsiniz. Bunlar yer yer /Library/LaunchDaemons. Bunlar, XML özellik listesi biçimindedir. Başka bir tane oluşturun ve bunun gibi bir şeyle doldurun:

<?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.example.app</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>/path/to/script</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <false/>
    </dict>
</plist>

Değişim com.example.app, /bin/shve /path/to/scriptgerekli.

Sistem önyüklenirken komut dosyası daha sonra çalışacaktır. Çok erken çalışırsa, başarılı olana kadar ne yapması gerektiğini denemek ve yapmak için komut dosyasını yazabilir veya sıfır olmayan bir hata koduyla çıkıp </dict>satırdan önce özellik listesine eklemesini sağlayabilirsiniz :

<key>KeepAlive</key>
<dict>
     <key>SuccessfulExit</key>
     <false/>
</dict>

OS X fırlatma cinleri ve hizmetler hakkında daha fazlası için, ben bakarak öneririz burada ya bunları yaparken güzel bir hızlı başvuru için buraya Launchd neler yapabileceğinize ilişkin daha kapsamlı bir referans için.


Bu plist belgeye ne diyorsunuz? Ve / path / to / script == / System / Library / StartupItems / script mi?
JeffK

1
İlk soru için: Plist belgesinin ismi genellikle, özellik listesindeki Label tuşunun (bu durumda, "com.example.app") .plist uzantılı ayarını kullanır.
andonuts

1
İkinci soru için: Bu doğru, ancak senaryo başka bir yere taşınmalı.
andonuts

Pistin bozuk. Bir Anahtar'a ihtiyacınız var: <key>Program</key>değere sahip <string>/bin/sh</string>ve sonra <key>ProgramArguments</key>sadece değere sahip olmalıdır<string>/path/to/script</string>
Jon Brooks

Aslında, benimki de yanlış: <key>ProgramArguments</key>bir dizi olması gerekiyor ..
Jon Brooks

16

Bir süre önce sadece bunu yapmak için cron kullandım. Böyle bir giriş yapabilirsiniz

@reboot /path/to/my/script

Daha fazla bilgi burada

İlk beş alanın yerine, sekiz özel dizgiden biri görünebilir:

       string          meaning
       ------          -------@reboot ------@reboot
       @reboot         Run once, at startup.
       @yearly         Run once a year, "0 0 1 1 *".
       @annually       (same as @yearly)
       @monthly        Run once a month, "0 0 1 * *".
       @weekly         Run once a week, "0 0 * * 0".
       @daily          Run once a day, "0 0 * * *".
       @midnight       (same as @daily)
       @hourly         Run once an hour, "0 * * * *".

1
Bilmek çok kullanışlı!
geotheory

7
cronBugünlerde OS X'te bunu yapmanın doğru yolu değil. Bunun yerine LaunchAgent veya LaunchDeamon kullanın (launchd). Daha fazla bilgi için: developer.apple.com/library/mac/documentation/MacOSX/Conceptual/… Although it is still supported, cron is not a recommended solution. It has been deprecated in favor of launchd.
KuzenCocaine

4
cronyapılandırmak çok daha kolay launchdolsa da. Ne demek istediğimi görmek için bu konudaki iki cevabı karşılaştırın. crontek bir dosyada tek bir satır alır; burada launchdönyüklemede çalıştırılmasını istediğiniz komut dosyasını tanımlamak için bir komut dosyasına ihtiyaç duyar.
Dannid

@Dannid Kron çoğaltma, sıra tamponlama ve diğerlerini çalıştırmak için duyarlı değildir. Bu durumda uygulanabilir olmasına rağmen, her zaman bir iskelet anahtarı değildir, ya da deyimsel bir çözüm değildir.
Yeni İskenderiye

Crontab çok daha iyi. Unix dünyasında hızlı, kirli ve uzun süredir kurulmuş. Bu @reboot anahtar sözcüğünü tamamen kazdım.
macetw

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.