Di posting sebelumnya, kita berbicara tentang input, output, dan redirection dalam skrip bash. Hari ini kita akan belajar bagaimana menjalankan dan mengontrolnya di sistem Linux. Sampai saat ini, kami hanya dapat menjalankan skrip dari antarmuka baris perintah, tetapi ini bukan satu-satunya cara untuk menjalankan skrip bash Linux.
Posting ini menjelaskan berbagai cara untuk mengontrol skrip bash Linux Anda.
Sinyal Linux
Ini adalah sinyal sistem Linux yang paling umum:
1 | SIGHUP | Proses terhenti. |
2 | MASUKKAN | Gangguan Proses. |
3 | SIGQUIT | Proses berhenti atau berhenti. |
9 | SIGKILL | Proses penghentian. |
15 | SIGTERM | Proses penghentian. |
17 | SIGSTOP | Proses berhenti tanpa penghentian. |
18 | SIGTSTP | Proses berhenti atau berhenti tanpa penghentian. |
19 | SIGCONT | Proses lanjutan setelah berhenti. |
Skrip bash Linux Anda tidak mengontrol sinyal ini. Anda dapat memprogram skrip bash untuk mengenali sinyal dan menjalankan perintah berdasarkan sinyal yang dikirim.
Menghentikan proses
Untuk menghentikan proses yang sedang berjalan, Anda dapat menekan Ctrl+C, yang menghasilkan sinyal SIGINT untuk menghentikan proses yang sedang berjalan di shell.
$ sleep 100
Ctrl+C
Menjeda proses
Tombol Ctrl+Z menghasilkan sinyal SIGTSTP untuk menghentikan proses apa pun yang berjalan di shell, dan itu meninggalkan program di memori.
$ sleep 100
Ctrl+Z
Angka di antara tanda kurung, yaitu (1), adalah nomor pekerjaan.
Jika Anda mencoba keluar dari shell dan Anda memiliki tugas yang dihentikan untuk shell Anda, bash akan memperingatkan Anda jika Anda.
Anda dapat menggunakan perintah ps untuk melihat pekerjaan yang dihentikan.
ps –l
Di kolom S (status proses), ini menunjukkan status dilacak (T) atau dihentikan (S).
Jika Anda ingin menghentikan pekerjaan yang dihentikan, Anda dapat menghentikan prosesnya dengan menggunakan perintah kill.
kill processID
Sinyal Jebakan
Untuk menjebak sinyal, Anda dapat menggunakan perintah perangkap . Jika skrip mendapatkan sinyal yang ditentukan oleh perintah trap, skrip akan berhenti memproses, dan sebagai gantinya, skrip menangani sinyal tersebut.
Anda dapat menjebak sinyal menggunakan perintah trap seperti ini:
#!/bin/bash trap "echo 'Ctrl-C was trapped'" SIGINT total=1 while [ $total -le 3 ]; do echo "#$total" sleep 2 total=$(($total + 1)) done
Setiap kali Anda menekan Ctrl+C, sinyal terjebak, dan pesan tercetak.
Jika Anda menekan Ctrl+C, pernyataan gema yang ditentukan dalam perintah trap akan dicetak alih-alih menghentikan skrip. Keren, kan?
Menjebak jalan keluar skrip
Anda dapat menjebak keluar skrip shell menggunakan perintah trap seperti ini:
#!/bin/bash # Add the EXIT signal to trap it trap "echo Goodbye..." EXIT total=1 while [ $total -le 3 ]; do echo "#$total" sleep 2 total=$(($total + 1)) done
Saat skrip bash keluar, pesan Selamat tinggal dicetak seperti yang diharapkan.
Selain itu, jika Anda keluar dari skrip sebelum menyelesaikan pekerjaannya, jebakan EXIT akan diaktifkan.
Memodifikasi atau menghapus jebakan
Anda dapat mengeluarkan kembali perintah trap dengan opsi baru seperti ini:
#!/bin/bash trap "echo 'Ctrl-C is trapped.'" SIGINT total=1 while [ $total -le 3 ]; do echo "Loop #$total" sleep 2 total=$(($total + 1)) done # Trap the SIGINT trap "echo ' The trap changed'" SIGINT total=1 while [ $total -le 3 ]; do echo "Second Loop #$total" sleep 1 total=$(($total + 1)) done
Perhatikan bagaimana skrip mengelola sinyal setelah mengubah perangkap sinyal.
Anda juga dapat menghapus jebakan dengan menggunakan dua garis.
trap -- SIGNAL
#!/bin/bash trap "echo 'Ctrl-C is trapped.'" SIGINT total=1 while [ $total -le 3 ]; do echo "#$total" sleep 1 total=$(($total + 1)) done trap -- SIGINT echo "I just removed the trap" total=1 while [ $total -le 3 ]; do echo "Loop #2 #$total" sleep 2 total=$(($total + 1)) done
Perhatikan bagaimana skrip memproses sinyal sebelum melepas perangkap dan setelah melepas perangkap.
$ ./myscript
Ctrl+C
Ctrl+C pertama terjebak, dan skrip terus berjalan sementara yang kedua keluar dari skrip karena perangkap telah dihapus.
Menjalankan skrip Bash Linux dalam mode latar belakang
Jika Anda melihat output dari perintah ps, Anda akan melihat semua proses yang berjalan di latar belakang dan tidak terikat ke terminal.
Kita bisa melakukan hal yang sama, cukup letakkan simbol ampersand (&) setelah perintah.
#!/bin/bash total=1 while [ $total -le 3 ]; do sleep 2 total=$(($total + 1)) done
$ ./myscipt &
Setelah Anda selesai melakukannya, skrip berjalan dalam proses latar belakang yang terpisah pada sistem, dan Anda dapat melihat id proses di antara tanda kurung siku.
Saat skrip mati, Anda akan melihat pesan di terminal.
Perhatikan bahwa saat proses latar belakang sedang berjalan, Anda dapat menggunakan monitor terminal Anda untuk pesan STDOUT dan STDERR, jadi jika terjadi kesalahan, Anda akan melihat pesan kesalahan dan keluaran normal.
Proses latar belakang akan keluar jika Anda keluar dari sesi terminal.
Jadi bagaimana jika Anda ingin terus berjalan bahkan jika Anda menutup terminal?
Menjalankan skrip tanpa hang-up
Anda dapat menjalankan skrip bash Linux di proses latar belakang meskipun Anda keluar dari sesi terminal menggunakan perintah nohup .
Perintah nohup memblokir semua sinyal SIGHUP. Ini mencegah proses keluar saat Anda keluar dari terminal.
$ nohup ./myscript &
Setelah menjalankan perintah nohup, Anda tidak dapat melihat output atau kesalahan apa pun dari skrip Anda. Anda mengirim pesan keluaran dan kesalahan ke file bernama nohup.out .
Catatan:saat menjalankan beberapa perintah dari direktori yang sama akan menimpa konten file nohup.out.
Melihat tugas
Untuk melihat pekerjaan saat ini, Anda dapat menggunakan perintah pekerjaan.
#!/bin/bash total=1 while [ $total -le 3 ]; do echo "#$count" sleep 5 total=$(($total + 1)) done
Kemudian jalankan.
$ ./myscript
Kemudian tekan Ctrl+Z untuk menghentikan skrip.
Jalankan skrip bash yang sama tetapi di latar belakang menggunakan simbol ampersand dan arahkan output ke file hanya untuk klarifikasi.
$ ./myscript > outfile &
Perintah pekerjaan menunjukkan pekerjaan yang dihentikan dan dijalankan.
jobs –l
-l parameter untuk melihat ID proses
Memulai kembali pekerjaan yang dihentikan
Anda dapat menggunakan perintah bg untuk memulai kembali pekerjaan dalam mode latar belakang.
$ ./myscript
Kemudian tekan Ctrl+Z
Sekarang dihentikan.
$ bg
Setelah menggunakan perintah bg, sekarang berjalan dalam mode latar belakang.
Jika Anda memiliki beberapa pekerjaan yang dihentikan, Anda dapat melakukan hal yang sama dengan menentukan nomor pekerjaan ke perintah bg.
Anda dapat menggunakan perintah fg untuk memulai kembali pekerjaan dalam mode latar depan.
$ fg 1
Menjadwalkan pekerjaan
Sistem Linux menyediakan dua cara untuk menjalankan skrip bash pada waktu yang telah ditentukan:
- atas perintah.
- tabel cron.
Perintah di
Ini adalah format perintahnya
pada waktu [-f nama file]
Perintah at dapat menerima format waktu yang berbeda:
- Format waktu standar seperti 10:15.
- Indikator AM/PM seperti 23:15.
- Waktu bernama seperti sekarang, tengah malam.
Anda dapat menyertakan tanggal tertentu, menggunakan beberapa format tanggal yang berbeda:
- Format tanggal standar, seperti MMDDYY atau DD.MM.YY.
- Tanggal teks, seperti 10 Juni atau 12 Februari, dengan atau tanpa tahun.
- Sekarang + 25 menit.
- 05:15 besok.
- 11:15 + 7 hari.
Kami tidak ingin menggali lebih dalam tentang perintah at, tetapi untuk saat ini, buat sederhana saja.
$ at -f ./myscript now
Anda dapat menggunakan parameter -M untuk mengirim output ke email jika sistem memiliki email, dan jika tidak, ini akan menekan output dari perintah at.
Untuk membuat daftar pekerjaan yang tertunda, gunakan perintah atq:
Hapus tugas yang tertunda
Untuk menghapus pekerjaan yang tertunda, gunakan perintah atrm:
$ atrm 18
Anda harus menentukan nomor pekerjaan ke perintah atrm.
Skrip penjadwalan
Bagaimana jika Anda perlu menjalankan skrip pada waktu yang sama setiap hari atau setiap bulan atau lebih?
Anda dapat menggunakan perintah crontab untuk menjadwalkan tugas.
Untuk membuat daftar tugas terjadwal, gunakan parameter -l:
$ crontab –l
Format untuk crontab adalah:
menit, jam, hari dalam sebulan, bulan, dan hari dalam seminggu
Jadi jika Anda ingin menjalankan perintah setiap hari pada 10:30, ketikkan yang berikut:
30 10 * * * perintah
Karakter wildcard (*) digunakan untuk menunjukkan bahwa cron akan menjalankan perintah setiap hari pada setiap bulan pada pukul 10:30.
Untuk menjalankan perintah pada pukul 17:30 setiap hari Selasa, Anda akan menggunakan perintah berikut:
30 17 * * 2 perintah
Hari dalam seminggu dimulai dari 0 hingga 6, di mana Minggu=0 dan Sabtu=6.
Untuk menjalankan perintah pada pukul 10:00 di awal setiap bulan:
00 10 1 * * perintah
Hari dalam sebulan adalah dari 1 hingga 31.
Mari kita sederhanakan untuk saat ini, dan kita akan membahas cron dengan sangat mendetail di postingan mendatang.
Untuk mengedit tabel cron, gunakan parameter -e seperti ini:
crontab –e
Kemudian ketik perintah Anda seperti berikut:
30 10 * * * /home/likegeeks/Desktop/myscript
Ini akan menjadwalkan skrip kami untuk berjalan pada pukul 10:30 setiap hari.
Catatan:terkadang, Anda melihat kesalahan yang mengatakan Sumber daya tidak tersedia untuk sementara.
Yang harus Anda lakukan adalah ini:
$ rm -f /var/run/crond.pid
Anda harus menjadi pengguna root untuk melakukan ini.
Sesederhana itu!
Anda dapat menggunakan salah satu direktori skrip cron yang telah dikonfigurasi sebelumnya seperti:
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
Letakkan saja file skrip bash Anda di salah satu direktori ini, dan itu akan berjalan secara berkala.
Memulai skrip saat login
Dalam posting sebelumnya, kita telah berbicara tentang file startup. Saya sarankan Anda untuk meninjaunya.
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile
Untuk menjalankan skrip Anda saat masuk, tempatkan kode Anda di
$HOME/.bash_profile
.
Memulai skrip saat membuka shell
Oke, bagaimana dengan menjalankan skrip bash kita saat shell terbuka? Mudah.
Ketik skrip Anda di
.bashrc
berkas.
Dan sekarang, jika Anda membuka jendela shell, itu akan menjalankan perintah itu.
Saya harap Anda menemukan posting yang bermanfaat. Terus kembali.
Terima kasih.