Membuat Bot Telegram untuk Notifikasi Penggunaan Disk (dan sedikit shell scripting)

Hai semuanya, apa kabar? Kali ini saya mau lanjutin yang kemarin. Masih berkaitan dengan Bot Telegram. Di tulisan sebelumnya kita sama-sama sudah belajar cara bikin Bot di Telegram dan mengirimkan pesan sederhana. Nah, kali ini yuk kita belajar meningkatkan Bot tersebut agar bisa melakukan hal yang lebih kompleks.

Saya kepikiran buat bikin Bot yang setiap waktu tertentu mengirimkan info penggunaan disk melalui Telegram. Di Linux, untuk mengecek penggunaan disk kita bisa pakai perintah df -h. df mungkin berasal dari kata “display filesystem” sedangkan -h artinya adalah human readable yang membuat format tampilan lebih mudah dibaca.

Pada pengujian kali ini saya pakai VM AlmaLinux yang saya gunakan di beberapa tulisan sebelumnya juga.

Kita coba dulu perintah df -h. Gambar 1 menampilkan kapasitas disk dari VM yang saya gunakan. Terlihat kapasitas dari berbagai direktori yang ada.

image host

gambar 1

Namun, pada pengujian kali ini kita coba untuk menampilkan kapasitas direktori tertentu aja ya. Untuk melakukannya, kita gunakan perintah df -h <lokasi direktori> . Kita coba untuk menampilkan direktori root (/) . Kita gunakan perintah df -h / . Gambar 2 menampilkan kapasitas dari direktori root (/).

image host

gambar 2

Kemudian, kita bisa meneruskan hasil dari perintah df -h tersebut ke dalam suatu file. Misalnya kita coba untuk meneruskan hasil dari perintah df -h / ke file bernama diskusage.log dengan menggunakan perintah df -h > diskusage.log. Tanda > artinya adalah perintah akan menimpa atau replace konten dari file yang sudah ada sebelumnya. Jadi, apabila sudah ada isi di file log tersebut, maka saat perintah dijalankan isi file akan berubah menjadi hasil dari perintah df -h (atau perintah lainnya) yang baru dilakukan.

Ada juga opsi lain, yaitu menggunakan tanda >> (append) yang artinya adalah menambahkan. Misalkan kita melakukan perintah df -h / >> diskusage.log maka hasil dari perintah df -h / akan ditambahkan pada baris baru, bukan menimpa isi file.

Apakah teman-teman masih belum mengerti? Saya coba kasih ilustrasinya hehehe. Di gambar 3 yaa.

image host

gambar 3

Pertama-tama kita buat file baru dengan nama filecontoh (perintah: touch filecontoh). Kemudian, kita masukkan suatu kalimat ke file filecontoh menggunakan fungsi redirect (>). Sintaksnya echo <kalimat> > <file tujuan&gt;. Perintah pada gambar 4 adalah echo "the quick brown fox jumps over the lazy dog" > filecontoh.

Kemudian kita lihat isi dari file filecontoh menggunakan perintah cat filecontoh. Dapat kita lihat kalimat tadi berhasil ditambahkan ke file tersebut.

Selanjutnya kita coba apakah dengan operator > akan menimpa isi file yang ada? Kita coba.

Masukkan kalimat yang kita inginkan, contohnya adalah pada gambar 3 saya ingin tambahkan kalimat "ibu membeli tiga kilogram jeruk di pasar". Gunakan operator > . Kemudian lihat isi file dengan menggunakan perintah cat filecontoh. Hasilnya, kalimat sebelumnya (the quick brown fox...) telah berganti menjadi ibu membeli tiga kilogram

Selanjutnya, kita tambahkan kalimat lain, namun kali ini menggunakan operator >>. Maka kita lihat tulisan ibu membeli tiga kilogram... masih ada dan kalimat baru ditambahkan pada baris baru.

Kembali ke pembahasan sebelumnya. Kita teruskan hasil dari df -h / ke file diskusage.log menggunakan operator >. Artinya, setiap hari file tersebut berubah. Tapi sebenarnya bisa kok file log dibuat per hari. Pakai tanggal juga bisa. Tapi untuk pengujian kali ini kita pake yang simpel dulu aja ya.

Kita gunakan perintah df -h > diskusage.log. Kemudian pada gambar 4 kita lihat isi file tersebut menggunakan perintah cat. Perintah df -h sudah berhasil ditambahkan pada file tersebut.

image host

gambar 4

Kemudian kita buat skripnya. Kita namakan filenya diskusage.sh. Shell script bisa digunakan untuk otomatisasi perintah atau menjalankan serangkaian perintah yang akan dieksekusi secara berurutan. Skrip kita simpan dengan ekstensi .sh.

Berikut ini adalah skrip yang digunakan

#!/bin/bash
df -h / > /home/user/penyimpanan.log
isi_log=$(cat /home/user/penyimpanan.log)
curl -s -F chat_id=[isi dengan chat id] -F text="$isi_log" https://api.telegram.org/bot[isi dengan token bot]/sendMessage

Isi chat id dan token bot dengan milik teman-teman ya.

Pada baris pertama, #!/bin/bash biasa disebut shebang. Berguna sebagai penanda shell yang akan digunakan untuk menjalankan skrip, in this case, shell yang digunakan adalah Bash.

Pada baris kedua mirip seperti contoh sebelumnya, yaitu menjalankan perintah df -h dan hasilnya disimpan pada file penyimpanan.log

isi_log merupakan sebuah variabel yang isinya adalah perintah cat untuk menampilkan isi file penyimpanan.log

Pada baris terakhir, terdapat fungsi yang berkaitan dengan Telegram API. Menggunakan perintah curl . Sesuaikan pada bagian chat id dan token bot, isi dengan detail teman-teman.

Untuk menjalankan skrip bisa menggunakan parameter ./[nama file skrip]. Pada pengujian ini berarti perintahnya adalah ./penyimpanan.sh . Namun kita tidak bisa langsung menjalankannya karena tidak menggunakan sudo dan juga file skrip tersebut belum bisa dieksekusi. Seperti pada gambar 5 menampilkan contoh saat menjalankan file skrip tanpa sudo, dan saat memakai sudo masih belum bisa juga.

image host

gambar 5

Kita bisa cek hak akses dari suatu file dengan menggunakan sintaks ls -l <nama file/direktori>. Misalkan kita ingin cek hak akses dari file penyimpanan.sh, maka perintahnya adalah ls -l penyimpanan.sh. Pada gambar 6 kita lihat file tersebut belum memiliki akses eksekusi (execute, dilambangkan dengan huruf x), masih rw-r--r--. Artinya, pemilik file memiliki hak akses baca dan tulis (r&w), grup dan others hanya memiliki hak akses baca (r).

image host

gambar 6

Selanjutnya kita berikan hak akses execute untuk file penyimpanan.sh dengan menggunakan perintah chmod +x. Kemudian kita periksa lagi menggunakan perintah ls -l dan bisa kita lihat pada gambar 7 file penyimpanan.sh sudah memiliki akses execute untuk semua pengguna (pemilik file, grup, others). Ini bukanlah best practice karena dengan perintah ini pengguna lain dapat menjalankan file skrip tersebut. Maka, untuk menghapus hak akses execute dari grup dan others bisa menjalankan perintah chmod go-x <nama file> atau jalankan chmod u+x <nama file> dari awal untuk menambahkan hak execute hanya untuk pemilik file (user).

image host

gambar 7

Kayanya terkait dengan hak akses ini menarik buat saya coba tulis di tulisan yang akan datang. Balik lagi ke pengujian, kita coba untuk menjalankan skrip tersebut. Apakah berhasil mengirimkan notifikasi atau tidak.

Kita jalankan skrip tersebut menggunakan perintah sudo ./penyimpanan.sh . Gambar 8 menampilkan: 1. saat menjalankan skrip, 2.notifikasi yang masuk, dan 3.isi pesannya. Namun, pada Terminal saat menjalankan skrip tersebut, banyak hal yang ditampilkan. Termasuk data pribadi Telegram (ID kita) yang digunakan untuk menggunakan Telegram API. Hal ini bisa menjadi kerentanan. Apakah bisa saat menjalankan skrip tidak ada yang ditampilkan? Bisa!

image host

gambar 8

Buka kembali file skrip, dan pada baris terakhir (https://api.telegram.org/bot[isi dengan token bot]/sendMessage) tambahkan > /dev/null sehingga menjadi https://api.telegram.org/bot[isi dengan token bot]/sendMessage > /dev/null

Artinya, pada layar tidak akan tampil output. Direktori/dev/null biasanya digunakan untuk “membuang” output yang tidak diinginkan. Gambar 9 menampilkan tampilan Terminal yang tidak menampilkan keluaran setelah menjalankan skrip.

image host

gambar 9

Pada tulisan kali ini, segini dulu ya. Di tulisan yang akan datang saya berencana melanjutkannya. See you in future post, bye~

Leave a Comment