Jalankan skrip saat start-up


188

Saya mencoba menjalankan skrip ketika Raspberry Pi saya melakukan booting. Saya ingin browser web terbuka secara otomatis.

Saya telah mencoba menemukan solusi sederhana, (seperti meletakkan skrip saya di direktori "startup" atau yang serupa), tetapi saya tidak melihat yang seperti itu.

Saya telah melihat ke pemula , tetapi saya berjuang untuk memahami bagaimana itu bekerja. Setiap skrip yang saya coba belum berfungsi saat saya mengujinya.


4
Sistem operasi apa yang Anda jalankan? Di FreeBSD, yang saya gunakan di Pi saya, Anda dapat menambahkan skrip startup ke /usr/local/etc/rc.d/, atau hanya menambahkan sesuatu ke /etc/rc.local. Distro Linux yang berbeda memiliki metode yang direkomendasikan berbeda. Jika Anda menjalankan X di atasnya, maka Anda mungkin harus melihat menambahkan sesuatu ke file .xinitrcatau Anda .xsession.
ghoti

Informasi lebih lanjut tentang proses startup X dapat ditemukan di sini .
ghoti

6
Harap perhatikan bahwa jawaban yang diterima di sini memiliki beberapa peringatan dan secara teknis tidak memulai apa pun saat boot kecuali dalam kondisi tertentu. Baca dengan cermat.
goldilocks

Anda meminta skrip yang berjalan saat Anda masuk, bukan saat pi boot atau saat start-up. Dua hal yang sangat berbeda, dan judulnya condong ke hasil pencarian google.
IAmNaN

Jawaban:


196

Untuk menjalankan Midori saat startup, lihat tutorial ini . Untuk solusi DIY, baca terus.


Anda dapat menambahkan perintah skrip yang dapat dieksekusi ke bagian bawah skrip.bashrc yang akan menjalankan skrip Anda setiap kali membuka terminal (atau menjalankan instance baru bash) .

  1. Pastikan Anda berada di pifolder:

    $ cd ~
    
  2. Buat file dan tulis skrip untuk dijalankan di file:

    $ sudo nano superscript
    
  3. Menyimpan dan keluar: Ctrl+ X, Y,Enter

  4. Buka .bashrcuntuk konfigurasi:

.bashrcadalah TIDAK dimaksudkan untuk menjalankan script.

Itu dijalankan setiap kali shell interaktif non-login dimulai dan digunakan untuk mengkonfigurasi shell.
~/.bashrc: executed by bash(1) for non-login shells.

   $ sudo nano .bashrc
  1. Gulir ke bawah ke bawah dan tambahkan baris: ./superscript

  2. Menyimpan dan keluar: Ctrl+ X, Y,Enter


Jika Anda mencari solusi yang berfungsi saat boot ke konsol , lihat tautan ini . Ikhtisar dasar:

  1. Buat file untuk skrip startup Anda dan tulis skrip Anda di file:

    $ sudo nano /etc/init.d/superscript
    
  2. Menyimpan dan keluar: Ctrl+ X, Y,Enter

  3. Jadikan skrip dapat dieksekusi:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Daftarkan skrip untuk dijalankan saat startup:

    $ sudo update-rc.d superscript defaults
    

Jika Anda ingin skrip dijalankan ketika Anda boot ke lingkungan LXDE , Anda bisa melihat posting forum Raspberry Pi ini :

  1. Navigasi ke ~/.config/lxsession/LXDE-pi

  2. Buka autostartfile di folder itu:

    $ sudo nano autostart
    
  3. Tambahkan @midoripada baris baru. Jika Anda ingin menjalankan sesuatu seperti skrip python, letakkan sesuatu seperti @python mypython.pydi baris baru. Menjalankan file skrip mungkin @./superscript, tetapi karena beberapa alasan skrip berjalan dalam loop tak terbatas (mungkin ini akan menghentikannya).

  4. Menyimpan dan keluar: Ctrl+ X, Y,Enter

  5. Mulai ulang Raspberry Pi Anda ke lingkungan LXDE.


Tutorial tentang pengaturan Midori saat startup adalah yang saya cari. Tidak yakin mengapa ada begitu banyak cara untuk melakukan hal yang begitu sederhana, tetapi saya senang itu berhasil sekarang.
Tyler Murry

1
@ syb0rg Jalankan di bagian login berfungsi seperti pesona (+1) jika saya masuk melalui ssh, tetapi tidak ketika sesi desktop lxde dimulai. apakah ada cara untuk melakukan itu?
George Profenza

@GeorgeProfenza Kapan Anda melakukannya $ sudo startx?
syb0rg

2
Hanya ingin menunjukkan bahwa skrip pyhton akan berjalan, tetapi jika ada kesalahan, itu hanya akan berada di suatu tempat di latar belakang menggunakan metode / etc / xdg / lxsession / LXDE / autostart. menggunakan .barshrc akan mengungkapkan kesalahan juga, tetapi sangat penting untuk memastikan skrip di tempat pertama (menemukan bahwa dengan cara yang sulit :))
George Profenza

7
.bashrctidak dibaca ketika sistem melakukan boot atau ketika pengguna masuk , hanya ketika membuka terminal baru (dan itu dibaca setiap kali pengguna membuka terminal baru). Saya bingung bahwa jawaban ini mendapat begitu banyak upvotes: bagian pertama jelas salah . Bagian ketiga benar untuk menjalankan program GUI.
Gilles

46

Cara yang saya lihat kebanyakan orang melakukannya (lihat di forum Raspberry Pi), dan telah berhasil dengan sukses /etc/rc.local.

Yang perlu Anda lakukan di sini adalah memasukkan ./myscriptfile teks rc.local. Jika itu dalam python, masukkan python myscript.py.

Ini secara harfiah adalah "solusi sederhana, (seperti meletakkan skrip saya di beberapa direktori" startup "atau yang serupa)" - mungkin mencari di forum ketika Anda memiliki pertanyaan, solusi ini muncul pada 4 hasil pertama dari pencarian Google!


4
FYI the rc.local secara default memiliki berbagai komentar tentang skrip yang tidak melakukan apa-apa dan memerlukan bit yang dapat dieksekusi berubah. Ini tidak benar, cukup masukkan perintah untuk skrip Anda sebelum keluar 0 dan itu akan berjalan saat startup. Pastikan skrip Anda keluar dari menjalankan di latar belakang atau itu akan memblokir prompt login. Ya, itulah yang saya lakukan.
merampok


@rob Apakah maksud Anda mereka menyarankan agar skrip disetel agar dapat dieksekusi? Ini dimitigasi dalam pertanyaan dengan menjalankan skrip dengan perintah python myscript.py. Jika Anda ingin chmod + x dan menambahkan #! /bin/python, Anda dapat menjalankan skrip dengan melakukan di $pathtofile/myscript.pymana $pathtofileadalah .jika Anda berada di direktori yang sama atau jalur absolut atau relatif ke file.
JFA

1
Itu tidak baik untuk program GUI seperti browser. /etc/rc.localhanya untuk memulai layanan sistem (program yang tidak memiliki antarmuka pengguna).
Gilles

1
@ ErickM.Sprengel Gunakan salah satu jawaban yang benar di utas ini, seperti yang ini .
Gilles

32

Tambahkan ke crontab

Crontab menjalankan perintah pada waktu yang ditentukan.


Edit file:

sudo crontab -e

Tambahkan baris ke file (di sini skrip python):

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

2
Untuk menjadi sedikit nitpicking di sini, secara teknis itu bukan crontab yang menjalankan perintah, tetapi bagaimanapun juga. Sehubungan dengan baris yang ditambahkan untuk menambahkan, disarankan untuk meletakkan path lengkap untuk perintah yang didefinisikan di sini (dalam hal ini path lengkap ke python3), lihat di sini
Ghanima

Ini adalah metode yang selalu saya gunakan karena kesederhanaannya. +1
Patrick Cook

Itu tidak baik untuk program GUI seperti browser. /etc/rc.localhanya untuk memulai program yang tidak memiliki antarmuka pengguna.
Gilles

2
Setelah menghabiskan banyak waktu mencoba membuatnya bekerja dengan rc.local dan init.d dan segala macam hal lainnya .. ini bekerja langsung! Terima kasih banyak!
Piotr Kula

4
ini tidak berhasil karena alasan tertentu di rpi os
Denis

11

Memulai ulang aplikasi xorg

Jika skrip yang ingin Anda mulai memerlukan sesi xorg maka Anda dapat mencoba mengikuti spec autostart freedesktop yang mungkin atau mungkin tidak berfungsi tergantung pada lingkungan desktop yang Anda gunakan.

Atau, Anda dapat menargetkan lingkungan desktop spesifik Anda seperti yang dijelaskan di https://wiki.archlinux.org/index.php/autostarting .

Menjalankan skrip sebagai layanan systemd

Jika skrip Anda cocok dengan deskripsi daemon atau 'layanan', dan sistem Anda menjalankan systemd yang merupakan kasus untuk raspbian dan linuces paling modern, maka Anda dapat mengonfigurasi skrip Anda untuk dijalankan sebagai layanan systemd - ini memberikan kontrol granular atas siklus hidup dan lingkungan eksekusi, serta prasyarat untuk memulai kembali skrip, seperti jaringan yang sedang berjalan dan berjalan. Dimungkinkan juga untuk mengkonfigurasi restart layanan jika terjadi kegagalan ( Restart=always, dan penundaan antara restart misalnya RestartSec=10).

Untuk penggunaan seluruh sistem, buat file unit sistemd Anda di bawah /etc/systemd/system, misalnya dengan 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

Lihat juga:

Sekarang kami siap untuk menguji layanan:

systemctl start autossh

Memeriksa status layanan:

systemctl status autossh

Menghentikan layanan:

systemctl stop autossh

Setelah Anda memverifikasi bahwa layanan berfungsi seperti yang diharapkan, aktifkan dengan:

systemctl enable autossh

CATATAN: Untuk tujuan keamanan systemdakan menjalankan skrip dalam lingkungan terbatas, mirip dengan bagaimana crontabskrip dijalankan, oleh karena itu jangan membuat asumsi tentang variabel sistem yang sudah ada sebelumnya. Gunakan Environmentkunci jika skrip Anda membutuhkan variabel tertentu untuk didefinisikan. Menambahkan set -xdi bagian atas skrip bash Anda dan kemudian menjalankannya systemctl status my_servicedapat membantu mengidentifikasi mengapa skrip Anda gagal. Sebagai patokan, selalu gunakan jalur absolut untuk semuanya termasuk echodan cat, atau jelaskan $ PATH Anda.


7

Saya ingin memasukkan dua sen saya, meskipun ini adalah pertanyaan lama tetapi umumnya diminta untuk melakukan hal sederhana - autostart. Saya mencoba semua solusi yang disarankan di semua jawaban untuk pertanyaan ini. Tidak satu pun dari mereka yang bekerja untuk saya. Saya menggunakan Raspberry PI Model 2 dengan Raspbian.

Satu-satunya cara agar aplikasi saya berhasil autostart berhasil adalah melalui skrip sebagai berikut. Saya katakan berhasil karena aplikasi saya mulai seperti yang diharapkan tanpa ada masalah seperti memulai dengan jalur kerja yang salah.

1. Buat file kosong dengan ekstensi .sh dan beri nama apa pun yang Anda inginkan.

2. Salin dan Rekatkan berikut ini PERSIS kecuali mengubah "nama aplikasi Anda" menjadi nama skrip yang baru saja Anda buat.

 #! /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. Kemudian, simpan file skrip dalam folder aplikasi Anda

  2. Lalu, buka /home/pi/.config/autostartfolder. Mungkin berbeda dalam kasus Anda. Cukup buka folder rumah Anda dan aktifkan tampilan folder tersembunyi. buka .config/autostart. Jika Anda tidak melihat folder autostart, lalu buat folder bernama autostart dalam folder .config.

  3. dalam folder autostart Anda perlu membuat pintasan ke file skrip yang Anda buat sebagai berikut. Buat file kosong dengan ekstensi .desktop.

  4. Copy dan paste berikut di file desktop yang kosong kecuali Anda akan perlu mengubah Comment, Name, Exec, Pathdan Iconnilai lapangan.

    [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. Simpan dan tutup file setelah mengubah semua bidang yang diperlukan. Kamu selesai. Coba saja.


Secara teknis skrip ini dijalankan oleh sistem daripada oleh pengguna tertentu - jadi mungkin aplikasi Anda lebih baik masuk /usr/local/bin/ApplicationName...?
SlySven

@SlySven "sistem" adalah pengguna tertentu.
Penebusan Terbatas

Apakah dijalankan sebagai root (UID = 0) atau pengguna pi (UID ~ 500 atau 1000 IIRC) - jika dijalankan sebagai root atau sistem lain UID (kurang dari 500) maka secara tradisional merupakan praktik yang baik untuk menyimpan file skrip ( atau apa pun yang bergantung pada) pada perangkat root sehingga jika ada masalah dengan perangkat lain (misalnya homejika itu adalah perangkat terpisah) tidak akan ada masalah dengan skrip (atau file yang dapat dieksekusi) tidak tersedia saat file sistem gagal kembali ke /bin/shshell pengguna tunggal ! Saat ini systemdcaranya adalah dengan memasang keduanya /dan /usrsebelum PID 1 dimulai ...
SlySven

5

Saya juga mengalami masalah dengan ini. Pada Raspberry Pi3 menjalankan Raspbian inilah yang saya lakukan:

  1. Buat skrip shell startup di direktori root Anda (saya beri nama "peluncuran"):

sudo leafpad launch.sh

  1. Simpan file
  2. Edit file autostart LXDE-pi

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

  1. Tambahkan ini ke bagian bawah file itu

./launch.sh

  1. reboot

3

Pada Raspberry Pi3 yang menjalankan Peregangan Raspbian, inilah yang saya lakukan:

Edit file autostart LXDE-pi

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

Tambahkan ini ke bagian bawah file itu

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

simpan & reboot


1

Metode 1:

Untuk meluncurkan perintah secara otomatis saat login, masukkan perintah ke file bernama

.bashrc

dalam direktori pengguna (misalnya / home / pi)

.bashrcadalah TIDAK dimaksudkan untuk menjalankan script.

Itu dijalankan setiap kali shell interaktif non-login dimulai dan digunakan untuk mengkonfigurasi shell.
~/.bashrc: executed by bash(1) for non-login shells.

Misalnya, file tersebut dapat berisi

chromium-browser --kiosk www.google.com

untuk meluncurkan Chromium di layar penuh yang diarahkan ke www.google.com


Metode 2:

Solusi ini bekerja dengan sangat baik. Setelah browser memuat ada kotak hitam kecil di kiri atas layar yang tampaknya menjadi bug umum (yang disebutkan di forum oleh orang lain) tetapi sebaliknya mode layar penuh menyembunyikan semuanya kecuali halaman browser.

Edit file autostart:

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

Mengomentari semuanya menggunakan '#' di awal setiap baris dan kemudian tambahkan baris berikut

Jalankan browser secara otomatis

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

Jika perlu gunakan alat konfigurasi untuk mengaktifkan GUI pada powerup secara otomatis

sudo raspi-config

Jika Anda perlu keluar kembali ke command prompt CTRL+ ALT+F1

CTRL+ ALT+F2


0

Anda dapat menempatkan skrip Anda di bagian bawah /etc/profilefile.

Opsi lain tidak berfungsi untuk saya, tetapi ini mungkin karena saya meletakkan skrip saya di desktop.


0

buat file .sh dengan perintah 'python /path/to/your/script.py' ketik 'sudo nano /etc/rc.local' dan ketikkan path ke file .sh

sebelum

exit 0

Atau Anda bisa mengetik

crontab -e

atau

sudo crontab -e 

jika Anda ingin skrip dijalankan saat startup

di dalam tipe file di

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

2
Penggunaan lintasan lengkap sangat disarankan untuk entri crontab!
Ghanima

-2

itu BEKERJA. (Pada setiap boot ulang, siapkan pengiriman berikut ini secara otomatis)

$ 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

Inilah yang biasanya saya lakukan.

  1. Simpan file Anda di direktori home raspberry pi. Misalnya: mycode.py
  2. Edit file:

    sudo nano .bashrc

.bashrcadalah TIDAK dimaksudkan untuk menjalankan script.

Itu dijalankan setiap kali shell interaktif non-login dimulai dan digunakan untuk mengkonfigurasi shell.
~/.bashrc: executed by bash(1) for non-login shells.

  1. Pergi ke akhir file dan tulis:

    sudo python mycode.py

  2. Jika Anda ingin output disimpan dalam file txt, edit kode pada Langkah 3 sebagai berikut:

    sudo python mycode.py >> output.py

Semoga ini membantu!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.