it-swarm-id.com

Bagaimana cara menjalankan skrip saat start up?

Bagaimana saya bisa menjalankan skrip otomatis ketika Ubuntu dimulai jadi saya tidak harus menjalankannya secara manual setelah startup?

497
myusuf3

Tergantung pada jenis skrip yang Anda perlu jalankan .. Untuk layanan dan sejenisnya Anda harus menggunakan pemula . Tetapi untuk skrip pengguna, ini harus diluncurkan sebagai skrip sesi oleh gnome! Lihat di bawah System> Preferences> Startup Applications.

Di samping catatan jika Anda memerlukan beberapa skrip untuk dijalankan pada terminal login Anda dapat menambahkannya ke file . Bash_login di direktori home Anda.

Untuk 14,04 dan lebih tua

Perintah sederhana (yang tidak perlu tetap berjalan) dapat menggunakan pekerjaan pemula seperti:

start on startup
task
exec /path/to/command

Simpan ini dalam file .conf di /etc/init (jika Anda perlu menjalankannya sebagai root ketika sistem dinyalakan), atau dalam ~/.config/upstart (jika Anda memerlukannya dijalankan sebagai pengguna Anda saat Anda masuk).

200
LassePoulsen

Salah satu pendekatan adalah menambahkan tugas @reboot cron :

  1. Menjalankan crontab -e akan memungkinkan Anda untuk mengedit cron Anda.
  2. Menambahkan baris seperti ini ke dalamnya:

    @reboot /path/to/script
    

    akan menjalankan skrip itu setelah komputer Anda boot.

531
ceejayoz

Bagaimana dengan menambahkan perintah ke /etc/rc.local? Anda harus menggunakan akses Sudo untuk mengedit file ini.

Sudo nano /etc/rc.local
154

Ada berbagai cara untuk menjalankan perintah secara otomatis:

  1. Sistem pemula akan menjalankan semua skrip dari mana ia menemukan konfigurasi dalam direktori /etc/init. Skrip ini akan berjalan selama startup sistem (atau sebagai respons terhadap peristiwa tertentu, mis., Permintaan penutupan) dan demikian pula tempat untuk menjalankan perintah yang tidak berinteraksi dengan pengguna; semua server mulai menggunakan mekanisme ini.

    Anda dapat menemukan pengantar yang dapat dibaca di: http://upstart.ubuntu.com/getting-started.html halaman manual man 5 init dan man 8 init memberi Anda detail lengkap.

  2. Skrip Shell bernama .gnomerc di direktori home Anda secara otomatis diambil setiap kali Anda masuk ke sesi GNOME. Anda dapat menempatkan perintah sewenang-wenang di sana; variabel lingkungan yang Anda atur dalam skrip ini akan dilihat oleh program apa pun yang Anda jalankan di sesi Anda.

    Perhatikan bahwa sesi tidak dimulai sampai skrip .gnomerc selesai; oleh karena itu, jika Anda ingin melakukan autostart beberapa program yang sudah berjalan lama, Anda perlu menambahkan & ke permintaan program, untuk melepaskannya dari Shell yang sedang berjalan.

  3. Opsi menu Sistem -> Preferensi -> Aplikasi Startup memungkinkan Anda untuk menentukan aplikasi apa yang harus dimulai ketika sesi grafis Anda dimulai (Ubuntu sudah menentukan beberapa), dan tambahkan atau hapus sesuai selera Anda. Ini memiliki tujuan dan ruang lingkup yang hampir sama dari skrip .gnomerc, kecuali Anda tidak perlu tahu sintaks sh (tetapi Anda juga tidak dapat menggunakan konstruk pemrograman sh).

70
Riccardo Murri

Untuk 15,04 dan yang lebih baru:

Untuk menjalankan (berumur pendek)1 perintah saat startup menggunakan systemd , Anda dapat menggunakan unit systemd tipe OneShot. Misalnya, buat /etc/systemd/system/foo.service yang berisi:

[Unit]
Description=Job that runs your user script

[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Lalu lari:

Sudo systemctl daemon-reload
Sudo systemctl enable foo.service

Pada dasarnya, ini hanya mengkonversi pekerjaan pemula yang khas ke yang systemd (lihat Systemd untuk pengguna pemula ).

Anda dapat menjalankan banyak perintah dari file layanan yang sama, menggunakan beberapa baris ExecStart:

[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure

Perintah harus selalu diberikan dengan path lengkap. Jika ada perintah yang gagal, sisanya tidak berjalan. - sebelum path memberitahu systemd untuk mengabaikan status keluar yang bukan nol (alih-alih menganggapnya gagal).

Relevan:


Untuk sesi pengguna, Anda dapat membuat unit systemd di ~/.config/systemd sebagai gantinya. Ini harus bekerja dengan 16,04 dan seterusnya, tetapi tidak rilis Ubuntu sebelumnya dengan systemd (karena mereka masih menggunakan pemula untuk sesi pengguna). Unit sesi pengguna dapat dikontrol dengan perintah yang sama seperti dengan layanan sistem, tetapi dengan opsi --user ditambahkan:

systemctl --user daemon-reload
systemctl --user status foo.service

Sintaks shell

Perhatikan bahwa, tidak seperti Pemula, systemd tidak menjalankan perintah Exec* melalui Shell. Ia melakukan beberapa ekspansi variabel terbatas dan beberapa perintah (dipisahkan oleh ;) itu sendiri, tapi hanya sejauh sintaksenya mirip Shell. Untuk hal yang lebih rumit, katakan pengalihan atau pipa, bungkus perintah Anda dalam sh -c '...' atau bash -c '...'.


1Berbeda dengan daemon yang berumur panjang.

66
muru
$HOME/.config/autostart
  • Lokasi ini berisi daftar aplikasi startup.
  • File .desktop dapat diletakkan di sini yang akan dieksekusi saat startup.

Contoh contoh untuk file .desktop:

Menempatkan file .desktop berikut dalam $HOME/.config/autostart dan diberikan chmod +x:

[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script

Di sini "</path/to/script>" diganti dengan path ke script.sh Anda
(biasanya disarankan untuk /usr/local/bin agar-yang dapat dijalankan dengan perintah langsung katakan myscript diganti dengan "</path/to/script>").

Contoh contoh script.sh:

#!/bin/bash
<commands to be executed>
exit

Hasil: file .desktop akan diluncurkan dari $HOME/.config/autostart yang mengeksekusi skrip oleh Exec=

Oleh karena itu, Anda dapat menjalankan skrip Shell yang Anda inginkan saat startup!

27
Pandya

Untuk hal-hal sederhana, Anda dapat menambahkan perintah di System-> Preferences-> Sessions menunjuk ke lokasi skrip Anda.

Atau Anda dapat menambahkannya ke /etc/init.d/rc.local atau membuat pekerjaan pemula jika itu lebih rendah tingkat rendah barang.

Lihatlah https://help.ubuntu.com/community/UbuntuBootupHowto untuk info lebih lanjut

18
tutuca

Anda harus menggunakan pemula untuk ini. Pemula digunakan untuk proses Ubuntu yang secara otomatis dimulai. Ini adalah solusi yang disempurnakan seperti skrip init.d System-V lama. Ini juga memungkinkan Anda untuk memasukkan prasyarat di awal skrip Anda (mis. Apakah Anda memerlukan jaringan yang sedang berjalan? Dll.)

5
txwikinger

cron jawaban diterapkan berbeda dari yang teratas

Jawaban ini masih menggunakan cron tetapi menggunakan metode yang berbeda dari jawaban yang dipilih teratas. Ini berfungsi sejak Ubuntu 16.04 tetapi mungkin didukung lebih cepat. Hanya saja saya mulai menggunakan cron untuk menjalankan pekerjaan ketika komputer dinyalakan sejak 16.04.

Kapan cron dijalankan?

Dalam komentar seseorang bertanya "kapan mereka berlari?". Anda dapat memberi tahu di syslog/journalctl:

$ journalctl -b | grep cron
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (pidfile fd = 3)
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (Running @reboot jobs)
Jan 02 16:54:40 alien systemd[1]: Started Run anacron jobs.
Jan 02 16:54:40 alien anacron[949]: Anacron 2.3 started on 2018-01-02
Jan 02 16:54:40 alien anacron[949]: Normal exit (0 jobs run)
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[951]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[985]: (root) CMD (   /usr/local/bin/cron-reboot-cycle-grub-background)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root

Satu hal yang perlu diperhatikan adalah cron dapat mengirimkan email kepada Anda status pekerjaan yang dijalankan dan @reboot pekerjaan dijalankan sehingga manajer jaringan dan email tidak akan berjalan kecuali Anda memasukkan perintah sleep ke dalam skrip Anda.

Tempat meletakkan skrip Anda

Letakkan skrip Anda di direktori /etc/cron.d:

$ ll /etc/cron.d
total 44
drwxr-xr-x   2 root root  4096 Nov 26 19:53 ./
drwxr-xr-x 139 root root 12288 Dec 31 13:58 ../
-rw-r--r--   1 root root   244 Dec 28  2014 anacron
-rw-r--r--   1 root root   148 Feb 18  2017 cycle-grub-background
-rw-r--r--   1 root root   138 Mar  5  2017 display-auto-brightness
-rw-r--r--   1 root root   460 Nov 26 19:53 nvidia-hdmi-sound
-rw-r--r--   1 root root   102 Feb  9  2013 .placeholder
-rw-r--r--   1 root root   224 Nov 19  2016 touch-vmlinuz
-rw-r--r--   1 root root   700 Aug  5 11:15 turn-off-hyper-threading

Seperti apa bentuk skrip?

Berikut adalah beberapa skrip yang saya siapkan untuk menjalankan setiap boot:

$ cat /etc/cron.d/cycle-grub-background Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
@reboot   root    /usr/local/bin/cron-reboot-cycle-grub-background

$ cat /etc/cron.d/touch-vmlinuz
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    touch "/boot/vmlinuz-"`uname -r`
3