Başlangıçta komut dosyası çalıştır


189

Ahududu Pi'm önyüklendiğinde bir senaryo yürütmeye çalışıyorum. Web tarayıcısının otomatik olarak açılmasını istiyorum.

Basit bir çözüm bulmaya çalıştım, (betiğimi bazı "başlangıç" dizinine veya benzeri birşeye bırakmak gibi) ama böyle bir şey göremiyorum.

Upstart'a baktım ama bunun nasıl çalıştığını kavramaya çalışıyorum. Denedim hiçbir komut onları test ederken işe yaramadı.


4
Ne tür bir işletim sistemi kullanıyorsun? Pi'mde kullandığım FreeBSD'de, /usr/local/etc/rc.d/ dosyasına başlangıç ​​komut dosyaları ekleyebilir veya /etc/rc.local dosyasına bir şeyler ekleyebilirsiniz. Farklı Linux dağıtımları farklı önerilen yöntemlere sahiptir. Eğer üzerinde X kullanıyorsanız, o zaman .xinitrcya da .xsessiondosyaya bir şeyler eklemek isteyebilirsiniz .
saat

X başlatma işlemi hakkında daha fazla bilgiyi burada bulabilirsiniz .
saat

6
Lütfen dikkat burada kabul cevap teknik olarak bazı uyarılar vardır ve gelmez belirli koşullar dışında açılışta bir şey başlar. Dikkatli oku.
goldilocks

Pi açıldığında veya açılışta değil, giriş yaptığınızda çalışan bir komut dosyası istiyorsunuz. İki çok farklı şey ve başlık google arama sonuçlarını eğriltiyor.
IAmNaN

Yanıtlar:


197

Başlangıçta Midori'yi çalıştırmak için bu eğitime bakın . DIY çözümleri için okumaya devam edin.


Sen alt kısmına komut çalıştırılabilir komut ekleyebilir .bashrcolacağını Senaryonu her zaman bir terminal açın (veya yeni bir örneğini çalıştırmak çalıştırmak bash) .

  1. piKlasörde olduğunuzdan emin olun :

    $ cd ~
    
  2. Bir dosya oluşturun ve dosyada çalıştırılacak bir komut dosyası yazın:

    $ sudo nano superscript
    
  3. Kaydet ve çık: Ctrl+ X, Y,Enter

  4. .bashrcYapılandırma için aç :

.bashrcolduğu DEĞİL komut dosyalarını çalıştırmak için tasarlanmıştır.

Giriş yapmayan bir etkileşimli kabuk başlatıldığında ve kabuğu yapılandırmak için kullanıldığında çalıştırılır.
~/.bashrc: executed by bash(1) for non-login shells.

   $ sudo nano .bashrc
  1. Aşağıya doğru kaydırın ve satırı ekleyin: ./superscript

  2. Kaydet ve çık: Ctrl+ X, Y,Enter


Konsolun önyüklemesinde çalışan bir çözüm arıyorsanız , bu bağlantıya bir göz atın . Temel yıkık:

  1. Başlangıç ​​komut dosyanız için bir dosya oluşturun ve komut dosyanızı dosyaya yazın:

    $ sudo nano /etc/init.d/superscript
    
  2. Kaydet ve çık: Ctrl+ X, Y,Enter

  3. Komut dosyasını yürütülebilir duruma getirin:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Başlangıçta çalıştırılacak olan betiği kaydedin:

    $ sudo update-rc.d superscript defaults
    

LXDE ortamına önyükleme yaparken bir komut dosyasının çalışmasını istiyorsanız , bu Raspberry Pi forum yayınına bir göz atabilirsiniz :

  1. Şu yöne rotayı ayarla ~/.config/lxsession/LXDE-pi

  2. autostartO klasördeki dosyayı:

    $ sudo nano autostart
    
  3. @midoriYeni bir satıra ekleyin . Bir python betiği gibi bir şey çalıştırmak istiyorsanız, @python mypython.pyyeni bir satıra benzer bir şey koyun . Bir komut dosyası çalıştırmak @./superscript, ancak bir nedenden dolayı komut dosyası sonsuz bir döngüde çalışır (belki de bunu durduracaktır).

  4. Kaydet ve çık: Ctrl+ X, Y,Enter

  5. Ahududu Pi'nizi LXDE ortamına yeniden başlatın.


Başlangıçta Midori'yi kurmaya ilişkin öğretici tam aradığım şeydi. Neden bu kadar basit bir şey yapmanın pek çok yolu olduğundan emin değilim, ama şimdi çalıştığına sevindim.
Tyler Murry,

1
@ syb0rg Oturum açma bölümündeki çalıştırma ssh aracılığıyla giriş yaparsam bir çekicilik (+1) gibi çalışır, ancak lxde masaüstü oturumu başladığında olmaz. Bunu yapmanın bir yolu var mı?
George Profenza 13:13

@GeorgeProfenza Ne zaman $ sudo startx?
syb0rg

2
Pyhton betiğinin çalışacağına işaret etmek istedim, ancak herhangi bir hata varsa, / etc / xdg / lxsession / LXDE / autostart yöntemini kullanarak arka planda bir yerde olacaktır. .barshrc kullanarak hem hataları ortaya ama senaryo ilk etapta sıkı olduğundan emin olmak için gerçekten çok önemli olacaktır (zor yoldan :) öğrendim)
George Profenza

7
.bashrcSistem önyüklendiğinde veya bir kullanıcı oturum açtığında, yalnızca yeni bir terminal açıldığında okunmaz (ve kullanıcı her yeni terminali açtığında okunur). Bu cevabın çok fazla oy almasına şaşırdım: ilk kısım yanlış . Üçüncü bölüm bir GUI programını yürütmek için doğrudur.
Gilles,

46

Çoğu insanı gördüğüm şekilde (Raspberry Pi forumlarına bir bakın) ve kendimi başarı ile yaptım /etc/rc.local.

Burada yapmanız gereken tek şey ./myscriptrc.local metin dosyasına koymak . Python ise, koy python myscript.py.

Bu kelimenin tam anlamıyla "basit bir çözüm (betiğimi bazı" başlangıç ​​"dizinine ya da benzer bir şeye bırakmam gibi)" - belki de sorularınız olduğunda forumlarda arama yapabilirsiniz, bu çözüm ilk 4 sonuçta ortaya çıktı Google arama!


4
FYI, rc.local tarafından varsayılan olarak komut dosyası hakkında hiçbir şey yapmadan ve çalıştırılabilir bitlere ihtiyaç duyan çeşitli yorumlar yapar. Bu doğru değil sadece betiğin komutunu 0 çıkışından önce girin ve başlangıçta çalışacaktır. Komut dosyanızın arka planda çalışanlardan çıktığından emin olun, aksi halde giriş istemini engeller. Evet, yaptığım şey bu.
rob


@rob Komut dosyasının çalıştırılabilir olarak ayarlanmasını önerdiklerini mi söylüyorsunuz? Bu, komut dosyası tarafından komut dosyası çalıştırılarak soruda hafifletilir python myscript.py. Eğer + x bunu chmod ve eklemek istiyorsanız #! /bin/python, aşağıdakileri yaparak komut dosyasını çalıştırabilirsiniz $pathtofile/myscript.pynerede $pathtofileolduğunu .aynı dizin veya dosyaya mutlak veya göreceli yol iseniz.
JFA

1
Tarayıcı gibi bir GUI programı için iyi değildir. /etc/rc.localyalnızca sistem servislerini başlatmak içindir (kullanıcı arayüzü olmayan programlar).
Gilles,

1
@ ErickM.Sprengel kullanın gibi bu iş parçacığı üzerinde doğru cevapların, biri bu bir .
Gilles

32

Crontab'a ekle

Crontab komutları belirli zamanlarda çalıştırır.


Dosyayı düzenleyin:

sudo crontab -e

Dosyaya satır ekleyin (burada bir python betiği):

@reboot python3 /home/pi/Desktop/exemple.py &

2
Burada az miktarda nitpicking olmak için, teknik olarak komutu çalıştıran crontab değil, yine de. Eklenecek listelenen satır ile ilgili olarak, burada tanımlanan komutlar için tam yollar koymanız önerilir (bu durumda tam yol python3), buraya
Ghanima

Bu basitliği nedeniyle hep kullandığım yöntem. +1
Patrick Cook

Tarayıcı gibi bir GUI programı için iyi değildir. /etc/rc.localsadece kullanıcı arayüzü olmayan programları başlatmak içindir.
Gilles,

2
Rc.local ve init.d ve her türlü diğer şeylerle çalışmayı denemek için çok fazla zaman harcadıktan sonra, hemen çalıştı! Çok teşekkürler!
Piotr Kula

4
Bu rpi os bazı nedenlerden dolayı çalışmıyor
Denis

11

Xorg uygulamalarını otomatik başlatma

Başlatmak istediğiniz komut dosyası bir xorg oturumu gerektiriyorsa , kullanmakta olduğunuz masaüstü ortamına bağlı olarak çalışabilecek ya da çalışmayabilecek freedesktop autostart özelliğini izlemeyi deneyebilirsiniz .

Alternatif olarak, masaüstü ortamınızı https://wiki.archlinux.org/index.php/autostarting adresinde açıklandığı gibi hedefleyebilirsiniz .

Bir betiği sistemd servisi olarak çalıştırma

Komut dosyanız bir daemon veya 'hizmet' tanımına uyuyorsa ve sisteminiz raspbian ve çoğu modern diziler için geçerli olan systemd kullanıyorsa, komut dosyanızı bir sistem hizmeti olarak çalışacak şekilde yapılandırabilirsiniz - bu işlem, ayrıntılı bir denetim sağlar. yaşam döngüsü ve yürütme ortamı ve ayrıca, ağın çalışması ve çalışması gibi komut dosyasını (yeniden) başlatmak için ön koşullar. Arıza durumunda servisin yeniden başlatılmasını konfigüre etmek de mümkündür ( Restart=always, ve örneğin yeniden başlatma arasında gecikme RestartSec=10).

Sistem genelinde kullanım için altında systemd birim dosyası oluşturmak /etc/systemd/systemile örneğin, vim /etc/systemd/system/autossh.service:

[Unit]
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target

[Service]
## use 'Type=forking' if the service backgrounds itself
## other values are Type=simple (default) and Type=oneshot
Type=forking
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=/usr/bin/killall -9 autossh
### NOTE: you can have multiple `ExecStop` lines
ExecStop=/usr/bin/killall ssh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody

# Useful during debugging; remove it once the service is working
StandardOutput=console

[Install]
WantedBy=multi-user.target

Ayrıca bakınız:

Şimdi hizmeti test etmeye hazırız:

systemctl start autossh

Hizmetin durumunu kontrol etme:

systemctl status autossh

Hizmeti durdurma:

systemctl stop autossh

Hizmetin beklendiği gibi çalıştığını doğruladıktan sonra şunları etkinleştirin:

systemctl enable autossh

NOT: Güvenlik nedeniyle systemd, komut dosyasını, komut crontabdosyalarının çalışma biçimine benzer şekilde sınırlı bir ortamda çalıştırır, bu nedenle önceden var olan sistem değişkenleri hakkında herhangi bir varsayımda bulunmazsınız. EnvironmentKomut dosyanızın tanımlanacak belirli değişkenlere ihtiyacı varsa , tuşları kullanın . Ekleme set -xsizin bash script üst kısmında ve daha sonra çalışan systemctl status my_serviceda komut başarısız neden tanımlanmasına yardımcı olabilir. Bir tumb kuralı olarak $ PATH'nızı içeren echove cat/ veya açıkça tanımlayan her şey için daima mutlak yollar kullanın .


7

İki kuruşa atmak istiyorum, bu eski bir soru olsa da, genellikle basit bir şey yapmam isteniyor - autostart. Önerilen tüm çözümleri bu sorunun tüm cevaplarında denedim. Hiçbiri benim için çalıştı. Raspberry PI Model 2'yi Raspbian ile kullanıyorum.

Uygulamamın başarılı bir şekilde otomatik olarak başlatılmasını sağlayabilmemin tek yolu aşağıdaki gibi bir betikten geçmek. Başarıyla söylüyorum, çünkü başvurum yanlış iş yolu ile başlamak gibi bir sorun yaşamadan beklendiği gibi başladı.

1. .sh uzantılı boş bir dosya oluşturun ve istediğiniz şekilde adlandırın.

2.Toplam ve "UYGULAMA ADI" nı yeni oluşturduğunuz komut dosyası adı olarak değiştirmemeniz dışında aşağıdaki TAMAMEN'i yapıştırın.

 #! /bin/sh

 ### BEGIN INIT INFO
 # Provides:          noip
 # Required-Start:    $remote_fs $syslog
 # Required-Stop:     $remote_fs $syslog
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
 # Short-Description: Simple script to start a program at boot
 ### END INIT INFO

 #change /direct/path/to/your/application to the path your application is in.
 cd /direct/path/to/your/application      # example cd /home/pi/myprogram/

 #change YourProgramExactName to Exact name of your program that you want to auto start
 ./YourProgramExactName

 exit 0 
  1. Ardından, komut dosyasını uygulama klasörünüze kaydedin.

  2. Ardından /home/pi/.config/autostartklasörü açın . Senin durumunda farklı olabilir. Sadece ana klasörünüzü açın ve gizli klasörlerin görüntülenmesini sağlayın. açık .config/autostart. Autostart klasörünü göremiyorsanız, .config klasöründe autostart adlı bir klasör oluşturun.

  3. autostart klasöründe, aşağıdaki şekilde oluşturduğunuz script dosyasına bir kısayol oluşturmanız gerekecektir. Uzantılı boş bir dosya oluşturun .desktop.

  4. Değiştirmek gerekir dışında Kopya boş masaüstü dosyasında aşağıdaki yapıştırın ve Comment, Name, Exec, Pathve Iconalanın değerini.

    [Desktop Entry]
    Comment=
    Exec=/path/to/Your/application/Name-of-the-script-file (.sh)
    Icon=/Path/to/Your/application/Icon/IconName
    Name=YourApplicationEXACTNAME
    Path=/Path/to/Your/Application-ONLY
    Type=Application
    
  5. Gerekli tüm alanları değiştirdikten sonra dosyayı kaydedin ve kapatın. Bitirdiniz. Sadece test et.


Teknik olarak bu betik, belirli bir kullanıcı yerine sistem tarafından çalıştırılır - bu nedenle uygulamanız daha iyi /usr/local/bin/ApplicationName...
SlySven

@SlySven "sistem" belirli bir kullanıcıdır.
Sınırlı Kefaret

O root olarak çalıştırmak mı (UID = 0) ya da pi kullanıcı (UID ~ 500 veya 1000 IIRC) - bu kök veya başka şekilde çalıştırılırsa sistem UID (500'den az) daha sonra o geleneksel olarak komut dosyasını depolamak için iyi bir uygulamadır ( ya da buna bağlı olan herhangi bir şey, kök aygıtta, başka bir aygıtla ilgili bir sorun olması homedurumunda (örneğin , ayrı bir aygıtsa), komut dosyası (veya çalıştırılabilir) dosyasında, kullanılamadığında komut dosyası (veya çalıştırılabilir) dosyası bulunmadığında bir sorun olmayacaktır. sistem tek bir kullanıcı /bin/shkabuğuna geri dönüyor ! Günümüzde systemdyolu hem monte etmektir /ve /usr... başlatılır PID 1 önce
SlySven

5

Ben de bu konuda sorun yaşadım. Ahududu Pi3 çalışan Raspbian üzerinde yaptığım şey buydu:

  1. Kök dizininizde bir başlangıç ​​kabuğu betiği oluşturun (benim adıma "launch"):

sudo leafpad launch.sh

  1. Dosya 'yı kaydet
  2. LXDE-pi autostart dosyasını düzenleyin

sudo leafpad /home/pi/.config/lxsession/LXDE-pi/autostart

  1. Bunu o dosyanın altına ekle

./launch.sh

  1. reboot

3

Ahududu Pi3 çalışan Raspbian Stretch'te yaptığım şey buydu:

LXDE-pi autostart dosyasını düzenleyin

    sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

Bunu o dosyanın altına ekle

    @sudo python3 /path/to/your/script.py

kaydet ve yeniden başlat


1

Yöntem 1:

Oturum açma sırasında otomatik olarak bir komut başlatmak için, komutu adlı bir dosyaya yerleştirin.

.bashrc

kullanıcı dizininde (örneğin / home / pi)

.bashrcolduğu DEĞİL komut dosyalarını çalıştırmak için tasarlanmıştır.

Giriş yapmayan bir etkileşimli kabuk başlatıldığında ve kabuğu yapılandırmak için kullanıldığında çalıştırılır.
~/.bashrc: executed by bash(1) for non-login shells.

Örneğin, dosya içerebilir

chromium-browser --kiosk www.google.com

Chromium'u tam ekran olarak başlatmak için www.google.com adresini


Yöntem 2:

Bu çözüm gerçekten iyi çalışıyor. Tarayıcı yüklendikten sonra ekranın sol üst köşesinde küçük bir siyah kare var ve bu genel bir hata gibi görünüyor (başkaları tarafından forumlarda belirtildiği gibi) ancak tam ekran modu tarayıcı sayfası dışındaki her şeyi gizliyor.

Otomatik başlatma dosyasını düzenleyin:

sudo nano /etc/xdg/lxsession/LXDE/autostart 

Her satırın başında '#' kullanarak her şeyi yorumlayın ve sonra aşağıdaki satırları ekleyin

Tarayıcıyı otomatik çalıştır

@xset s off
@xset -dpms
@xset s noblank
@midori -e Fullscreen -a http://google.com

Gerekirse, açılışta GUI'nin otomatik çalışmasını sağlamak için yapılandırma aracını kullanın

sudo raspi-config

CTRL+ ALT+ Komut istemine geri dönmeniz gerekirse F1

CTRL+ ALT+F2


0

Komut /etc/profiledosyanızı dosyanın altına yerleştirebilirsiniz .

Diğer seçenekler benim için işe yaramadı, ama bu belki de senaryoyu masaüstüne yerleştirdiğim için olabilir.


0

'python /path/to/your/script.py' yazın 'sudo nano /etc/rc.local' komutlarını kullanarak bir .sh dosyası oluşturun ve .sh dosyasının yolunu yazın

önce

exit 0

Veya sadece yazabilirsiniz

crontab -e

veya

sudo crontab -e 

betiğin başlangıçta çalışmasını istiyorsanız

içinde dosya türü

@reboot python /path/to/your/script.py &

2
Kullanımı tam yolları kuvvetle crontab girişleri için teşvik edilmektedir!
Ghanima

-2

o ÇALIŞIR. (Her yeniden açılışta aşağıdaki gönderimleri otomatik olarak hazırlar)

$ cat /etc/rc.local
#!/bin/sh -e
echo "18" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio18/direction
echo "1" > /sys/class/gpio/gpio18/value
exit 0

-2

Genelde yaptığım şey bu.

  1. Dosyanızı ahududu pi ana dizininde saklayın. Örn: mycode.py
  2. Dosyayı düzenleyin:

    sudo nano .bashrc

.bashrcolduğu DEĞİL komut dosyalarını çalıştırmak için tasarlanmıştır.

Giriş yapmayan bir etkileşimli kabuk başlatıldığında ve kabuğu yapılandırmak için kullanıldığında çalıştırılır.
~/.bashrc: executed by bash(1) for non-login shells.

  1. Dosyanın sonuna gidin ve şunu yazın:

    sudo python mycode.py

  2. Çıktının bir txt dosyasında saklanmasını istiyorsanız, 3. Adımdaki kodu aşağıdaki gibi düzenleyin:

    sudo python mycode.py >> output.py

Bu yardımcı olur umarım!

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.