GNU/Linux >> Belajar Linux >  >> Linux

Linux Bash Scripting Part5 – Sinyal dan Pekerjaan

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:

Bilangan Nama Pekerjaan
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.


Linux
  1. Komunikasi antar-proses di Linux:Soket dan sinyal

  2. Cara Menemukan dan Membunuh Proses Zombie di Linux

  3. Dasar-Dasar Sinyal Linux – Bagian I

  1. Linux:Temukan dan Bunuh Proses Zombie

  2. penghentian proses mmap, msync dan linux

  3. Proses Linux di latar belakang - Berhenti bekerja?

  1. Perintah Linux:pekerjaan, bg, dan fg

  2. Skrip Linux:3 cara untuk while loop di Bash

  3. Batas garis Shebang di bash dan kernel linux