Bagaimana saya bisa menjalankan skrip secara otomatis ketika Ubuntu mulai jadi saya tidak harus menjalankannya secara manual setelah startup?
Bagaimana saya bisa menjalankan skrip secara otomatis ketika Ubuntu mulai jadi saya tidak harus menjalankannya secara manual setelah startup?
Jawaban:
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.
Perintah sederhana (yang tidak perlu tetap berjalan) dapat menggunakan pekerjaan pemula seperti:
start on startup
task
exec /path/to/command
Simpan ini dalam .conffile di /etc/init(jika Anda membutuhkannya untuk menjalankan sebagai root ketika sistem boot up), atau dalam ~/.config/upstart(jika Anda membutuhkannya untuk berjalan sebagai pengguna Anda ketika Anda login).
system->pref->startup applicationstidak dapat ditemukan di /etc/init/atau di ~/.config/upstart. Jadi di mana aplikasi startup didefinisikan?
Salah satu pendekatan adalah menambahkan tugas cron @reboot :
crontab -eakan memungkinkan Anda untuk mengedit cron Anda.Menambahkan baris seperti ini ke dalamnya:
@reboot /path/to/script
akan menjalankan skrip itu setelah komputer Anda boot.
@rebootkunci adalah tip yang bagus karena tidak banyak diketahui.
man 5 crontabmengatakan itu @rebootdijalankan saat startup (ketika cron daemon dimulai).
rc.localkarena sistem tampaknya lebih diatur pada titik ini (PATH, dll). Sungguh aneh bahwa sangat sulit untuk memanggil sesuatu setelah startup sistem ..
Bagaimana dengan menambahkan perintah /etc/rc.local? Anda harus menggunakan akses sudo untuk mengedit file ini.
sudo nano /etc/rc.local
chmod 755 rc.local, dan menambahkan #!/bin/bashke baris pertama.
Untuk menjalankan perintah (berumur pendek) 1 saat menggunakan startup systemd, Anda dapat menggunakan unit tipe sistemd OneShot. Misalnya, buat yang /etc/systemd/system/foo.serviceberisi:
[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 mengonversi pekerjaan pemula yang baru menjadi pekerjaan sistemd (lihat Systemd untuk pengguna pemula ).
Anda dapat menjalankan banyak perintah dari file layanan yang sama, menggunakan beberapa ExecStartbaris:
[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 gagal, sisanya tidak berjalan. A -sebelum path memberitahu systemd untuk mengabaikan status keluar yang bukan nol (alih-alih menganggapnya gagal).
Relevan:
Untuk sesi pengguna, Anda dapat membuat unit systemd ~/.config/systemdsebagai gantinya. Ini harus bekerja dengan 16,04 dan seterusnya, tetapi tidak rilis Ubuntu sebelumnya dengan systemd (karena mereka masih menggunakan Upstart untuk sesi pengguna). Unit sesi pengguna dapat dikontrol dengan perintah yang sama seperti dengan layanan sistem, tetapi dengan --useropsi yang ditambahkan:
systemctl --user daemon-reload
systemctl --user status foo.service
Perhatikan bahwa, tidak seperti Pemula, systemd tidak menjalankan Exec*perintah melalui shell. Itu melakukan beberapa ekspansi variabel terbatas dan beberapa perintah (dipisahkan oleh ;) itu sendiri, tapi itu saja sejauh sintaks seperti shell berjalan. Untuk hal yang lebih rumit, katakan pengalihan atau pipa, bungkus perintah Anda di sh -c '...'atau bash -c '...'.
1 Berbeda dengan dasmon berumur panjang.
WantedBydigunakan di sini, misalnya, membuatnya mulai ketika multi-user.targettercapai. Anda dapat menggunakan Before, After, Requires, dll Lihatman systemd.unit
RemainAfterExittergantung pada layanan yang Anda mulai dan perilaku yang diinginkan. Misalnya, /bin/df -h<s> akan </s> seharusnya RemainAfterExit=no.
dfkebutuhan itu RemainAfterExit=no. Kecuali Anda ingin menjalankan perintah berulang kali setiap kali Anda menjalankan systemctl start foo.
Ada berbagai cara untuk menjalankan perintah secara otomatis:
Sistem pemula akan menjalankan semua skrip dari mana ia menemukan konfigurasi dalam direktori /etc/init. Skrip-skrip ini akan berjalan selama startup sistem (atau sebagai respons terhadap peristiwa-peristiwa tertentu, misalnya, 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 initdan man 8 initberikan rincian lengkapnya kepada Anda.
Sebuah skrip shell bernama .gnomercdi direktori home Anda secara otomatis bersumber 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 .gnomercskrip selesai; oleh karena itu, jika Anda ingin melakukan autostart pada beberapa program yang sudah berjalan lama, Anda perlu menambahkan &permintaan program, untuk melepaskannya dari shell yang sedang berjalan.
Opsi menu System -> Preferences -> Startup Applications memungkinkan Anda untuk menentukan aplikasi apa yang harus dimulai ketika sesi grafis Anda dimulai (Ubuntu sudah cukup banyak mendefinisikannya), dan menambah atau menghapusnya sesuai selera Anda. Ini memiliki tujuan dan cakupan .gnomercskrip yang hampir sama , kecuali Anda tidak perlu tahu shsintaks (tetapi Anda juga tidak dapat menggunakan shkonstruk pemrograman apa pun ).
.gnomerctampaknya berjalan sebelum memuat Unity, dan Startup Applicationstampaknya berjalan setelah memuat Unity. Saya harus menjalankan program yang duduk di menu bar Unity dan itu membuat perbedaan besar dalam hal ini!
sudo update-rc.d myscript.sh defaults, di mana /etc/init.d/myscript.sh adalah skrip Anda, juga menjalankannya saat startup.
$HOME/.config/autostart
.desktop file dapat diletakkan di sini yang akan dieksekusi saat startup.Contoh contoh untuk .desktopfile:
Masukkan dan berikan .desktopfile berikut :$HOME/.config/autostartchmod +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 Anda script.sh
(biasanya disarankan /usr/local/binagar-yang dapat dieksekusi dengan perintah langsung katakan myscriptdiganti dengan "</path/to/script>").
Contoh contoh dari script.sh:
#!/bin/bash
<commands to be executed>
exit
Hasil:
.desktopfile akan diluncurkan dari $HOME/.config/autostartyang menjalankan skrip olehExec=
Karenanya, Anda dapat menjalankan skrip shell yang Anda inginkan saat startup!
Untuk hal-hal sederhana, Anda dapat menambahkan perintah di System-> Preferences-> Sesi yang menunjuk ke lokasi skrip Anda.
Atau Anda dapat menambahkannya ke /etc/init.d/rc.local atau melakukan pekerjaan pemula jika itu adalah hal yang lebih rendah .
Lihatlah https://help.ubuntu.com/community/UbuntuBootupHowto untuk info lebih lanjut
cron jawaban yang diterapkan berbeda dengan yang terpilihJawaban ini masih menggunakan crontetapi 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 cronuntuk menjalankan pekerjaan ketika komputer dinyalakan sejak 16.04.
cronlari?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 crondapatkah Anda mengirim email status pekerjaan yang dijalankan dan @rebootpekerjaan yang dijalankan sehingga pengelola jaringan dan email awal tidak akan berjalan kecuali jika Anda memasukkan sleepperintah ke dalam 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
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`
@reboot.
crontab -eyang oleh sebagian orang dianggap sebagai salah satu seni hitam karena antarmuka yang mirip vim. Di sisi lain jawaban ini mungkin menarik bagi mereka yang otaknya terhubung dengan cara tertentu. Kita tidak semua dilemparkan dari cetakan yang sama. Kemudian lagi jawaban ini sudah memiliki satu suara sehingga kami akan membiarkan demokrasi mengambil jalannya.
crontab -ememunculkan asterisk ("*") kenangan selama beberapa menit, jam, dll. Saya selalu menemukan bahwa saya perlu petunjuk untuk google. Saya masih menemukan penggunaan /etc/cron.ddan /etc/cron.dailypilihan saya. Terutama karena itu cermin /etc/udev/rules.ddan /etc/systemd/system-sleepmetode. Sepertinya cocok.
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 ke awal skrip Anda (yaitu apakah Anda memerlukan jaringan berjalan? Dll.)