Cara memulai aplikasi secara otomatis saat boot

27

Saya baru mengenal Linux & menantikan untuk memulai aplikasi (yang berganti setiap 10 detik). Saya telah menulis program aplikasi & berfungsi baik tetapi sekarang saya ingin memulainya secara otomatis saat boot.

Dokumentasi di sini mengatakan untuk menyalin skrip startup ke /etc/init.ddirektori dan membuat tautan simbolis ke skrip yang disalin dalam rc.ddirektori.

Apa yang harus menjadi ekstensi dan nama file skrip ini? Bisakah kita menambahkan tautan simbolis secara manual rc.datau ada prosedur khusus untuk ini?

Adakah saran bagaimana mencapainya?

jurang
sumber
Cara yang disukai untuk menambahkan skrip init ke startup bervariasi menurut distro. Beberapa bahkan menghapusnya demi pemula dan sistem. Saya tidak akan merekomendasikan hanya menggunakan "&" untuk latar belakang, karena sesuatu seperti Debian start-stop-daemonmenanganinya lebih baik (meskipun lebih disukai program itu sendiri daemonizes). Distro apa yang Anda gunakan? Di luar jenis MIME desktop, ekstensi file tidak berarti di * nix dan lebih disukai yang tidak dapat dieksekusi.
jordanm
Jika Anda menggunakan petalogix, cukup ikuti dokumentasi itu - tidak diperlukan nama khusus, lakukan saja apa yang mereka katakan. Apakah kamu sudah mencobanya? permasalahan apa yang kamu hadapi? (Jika tidak, harap sebutkan distro Anda dan jelaskan apa yang tidak berhasil dengan apa yang Anda coba.)
Mat
Saya menggunakan Debian "wheezy" untuk RPi.
ngarai
1
jika Anda perlu melakukannya kira - kira setiap 10 detik (yaitu tidak tajam 10 detik), Anda mungkin ingin menggunakannya cron.
peterph
@peterph: tapi sepertinya program mengaktifkan LED setiap 10 detik, bukan program yang dijalankan setiap 10 detik.
Zorawar

Jawaban:

19

Inilah kutipan dari http://www.debian-administration.org/articles/28 yang sepertinya menjawab pertanyaan Anda.

Catatan: Pada contoh skrip di bawah ini, tambahkan saja panggilan ke bagian " start)" untuk benar-benar meluncurkan program Anda. Anda dapat menguji fungsionalitas skrip tanpa me-reboot sistem: sebut saja dengan path lengkap dan berikan parameter " start" atau " stop"

Ini dia:

Debian menggunakan sistem init seperti Sys-V untuk menjalankan perintah ketika runlevel sistem berubah - misalnya saat bootup dan waktu shutdown.

Jika Anda ingin menambahkan layanan baru untuk memulai ketika mesin melakukan booting, Anda harus menambahkan skrip yang diperlukan ke direktori /etc/init.d/. Banyak skrip yang sudah ada di direktori itu akan memberi Anda contoh hal-hal yang dapat Anda lakukan.

Berikut ini skrip yang sangat sederhana yang dibagi menjadi dua bagian, kode yang selalu berjalan, dan kode yang berjalan ketika dipanggil dengan "mulai" atau "berhenti".

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

Setelah Anda menyimpan file Anda ke lokasi yang benar, pastikan itu dapat dieksekusi dengan menjalankan " chmod 755 /etc/init.d/blah".

Maka Anda perlu menambahkan tautan simbolis yang sesuai untuk menyebabkan skrip dieksekusi ketika sistem mati, atau muncul.

Cara paling sederhana untuk melakukan ini adalah dengan menggunakan perintah khusus Debian update-rc.d:

root@skx:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah
Alexander Shcheblikin
sumber
apakah saya harus benar-benar meletakkan skrip ini di etc / init.d / atau apakah baris di atas, # /etc/init.d/blah, menunjukkan lokasi ke shell?
user137717
Saya mendapatkan "-sh: update-rc.d: command not found"
m4l490n
2
Sistem yang lebih baru digunakan systemduntuk banyak hal, termasuk untuk konfigurasi bootup. Gunakan systemctluntuk mengontrol dan mengkonfigurasi systemd.
Alexander Shcheblikin
4

Cara terbaik adalah memeriksa sumber paket distribusi Anda untuk layanan sistem reguler, misalnya untuk OpenSSH - Anda akan melihat apa praktik terbaiknya. Bagaimanapun, salah satu alasan di balik open-source adalah untuk dapat belajar dari sumber.

peterph
sumber
2
Saran yang sangat baik! Benar-benar bijak dan relevan, dan disetel ke semua Distos. (Dan secara tidak sengaja menjawab bagian "baru untuk Linux" dan "bagaimana saya melakukannya". Saya akan menggunakan jawaban ini untuk meningkatkan skrip start stop saya.
Bruce0
3

Gunakan Supervisor, program efektif yang mengelola dan mencatat aplikasi startup dengan argumen. Pelajari lebih lanjut dari http://supervisord.org/running.html dan (Ikuti instruksi instalasi.

Buat file conf di /etc/supervisor/conf.d/{PROGRAM_NAME}.confdan Berikut adalah kodenya,

[program:{PROGRAM_NAME}]
command=/usr/bin/{PROGRAM_NAME} -arg1 -arg2
autostart=true  
autorestart=true  
stderr_logfile=/var/log/supervisor/{PROGRAM_NAME}.err.log  
stdout_logfile=/var/log/supervisor/{PROGRAM_NAME}.out.log  

Kemudian jalankan dari baris cmd:

supervisorctl reload

Cosmo Arun
sumber
Sedangkan jawaban Anda baik-baik saja, saya pikir Anda harus mengubahnya untuk menunjukkan bahwa "supervisorctl reload" akan dieksekusi dari CLI, tidak untuk dimasukkan dalam file
.conf
3

Menggunakannya crontabjauh lebih mudah.

Gunakan crontab -euntuk mengedit crontab pengguna.
Tambahkan baris berikut di akhir:

@reboot <command>

Contoh:

  • @reboot my_script.sh
  • @reboot python my_script.py arg1 arg2

Akhirnya gunakan crontab -luntuk memastikan skrip Anda ditambahkan ke daftar.

Jithin Pavithran
sumber
Saya heran mengapa jawaban ini menerima downvotes? Sepertinya solusi yang sangat sederhana, dan yang menggunakan crontab - yang mungkin semua orang sudah tahu dan mengerti.
kolinko
1

Versi terbaru dari dukungan linux systemd(seperti yang dikatakan @AlexanderShcheblikin). Ini memiliki lebih banyak fitur dan lebih portabel daripada solusi khusus debian.

Silakan baca panduan yang sangat bagus ini .

Berikut ini adalah referensi cepat dari minimum yang diperlukan:

  1. Sebuah skrip (mis. myscript.sh) Dengan izin yang dapat dieksekusi.
  2. File Unit (mis. myservice.service) Dengan ekstensi ".service" /etc/systemd/systemdengan 644 izin yang berisi perintah untuk menjalankan skrip. Sebagai contoh,

:

[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh

[Install]
WantedBy=multi-user.target
  1. Jalankan perintah sudo systemctl enable myserviceuntuk mengaktifkannya untuk memulai saat boot.
mareoraft
sumber