Log Temperature di Linux [Opensuse Tumbleweed & Leap]

Mungkin kalian bertanya kenapa MajestyTech Workshop sering menulis artikel seputar Opensuse? Kenapa tidak mencoba distro lain? Alasannya sederhana. Karena Opensuse adalah distro dari sistem operasi Linux yang jarang sekali orang tertarik. Orang lebih sering menggunakan distro turunan Debian seperti salah satunya yang terkenal adalah Ubuntu. Sedangkan Opensuse orang seperti memilih menghindar karena (mungkin) susah, komunitasnya dianggap kecil (padahal nggak), atau jarang tutorial yang dibuat (ini sepertinya karena kebanyakan bahasa asing ya forum-forumnya, macem Rusia, Jerman, dsb). Sehingga dari alasan tersebut, MajestyTech Workshop mencoba untuk menembus batas dan menyingkirkan anggapan-anggapan miring dari orang-orang.

Artikel kali ini bisa dibilang cukup sederhana namun menjadi penting disaat kalian butuh untuk mencatat suhu PC/Laptop kalian. Terutama untuk mini PC yang memiliki resource kecil namun digunakan untuk kepentingan tingkat lanjut.

Install Paket "sensord"

Pertama di OS kalian harus terpasang paket sensord yang bisa kalian install melalui zypper maupun yast (atau sesuaikan dengan distro yang kalian pakai).

zypper install sensord

Jika sudah maka kalian jalankan cukup dengan mengetikkan perintah sensors di terminal kemudian tekan Enter maka tampil tulisan seperti ini:

Atau kalian juga bisa memberikan perintah watch sensors untuk memonitor segala sensor yang ada pada PC/Laptop kalian. Tentunya yang juga didukung oleh kernel yang kalian gunakan. Tampilan yang diberikan kurang lebih sama dengan tampilan pertama. Hanya saja ini digunakan jika kalian ingin melihat atau memonitor secara live. Data yang ditampilkan di update selama 2 detik sekali.

Membuat program utama

Setelah paket sensord terinstal, maka saatnya membuat bash script seperti di bawah ini. Untuk ekstensi atau format file script adalah .sh sedangkan nama file script-nya terserah kalian. Disini kita pakai nama file tlog_script.sh yang disimpan di direktori /usr/sbin/
Bash Script
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash 
# Log temperature over some time  interval given as days, hours, minutes or seconds.
# enter the variables according to your usage in the following seciton :
duration=3d12h  #duration format is  ndnhnmns where n is some number and d is day,
# h is hours, m is minutes and s is seconds. For example, 4d , 4d5h30m , 5m30s, 6h30m30s are all valid.

step=3
#----------------------------------------------------------------------
#starting time taken as current
dt=$(date '+%Y-%m-%dT%H:%M:%S');
#et=$(date '+%Y-%m-%dT%H:%M:%S');
touch temp.txt
fullname=$(date +"%d-%m-%Y_%H%M%S");

#----------------------------------------------------------------------
a=$(dadd $dt  $duration )
b=$(ddiff $dt $a -f '%S')
echo $a $b

ntimes=$((b/step))
echo $ntimes

echo "logging...";
nms=0
while [  $nms -lt $ntimes ];  do
        sensors | grep -A 0  'Core' | cut -c10-20 |tr "\n" "\t" >> temp.txt
        let nms=nms+1
        sleep  $step
        now=$(date +"%m/%d/%Y %T")
#       echo $now
        echo -e "$(cat temp.txt)""\t$now"  >> $fullname.txt
        rm temp.txt
done


#plotting using gnuplot to get a beautiful plot. 
day=86400 #different x-axis for different  time duration. A day = 86400 seconds

fcode=$(date "+%Y-%m-%d_%H%M%S") # generate a time stamp 
#echo $fcode
if [[ "$b" > "$day" ]]
then
        gnuplot -e "filename='temp_plot_$fcode'" plot_day
else
        gnuplot -e "filename='temp_plot_$fcode'" plot_time
fi
#end-of-script---------------------------------------------------------

Pada skrip bash tadi ada beberapa bagian penting yang kalian bisa ubah. Diantaranya adalah lama perekaman dan interval waktu pengukuran. Di baris ke-4 adalah lama waktu pencatatan atau perekaman temperatur CPU. Pada bari ke-4 tertulis 3d12h artinya perekaman temperatur dilakukan setiap 3 hari lebih 12 jam sekali. Setelah melewati waktu tersebut maka program secara otomatis akan membuat file baru untuk perekaman berikutnya.

Kemudian di baris ke-7 adalah interval waktu perekaman. Tertulis step=3 artinya pengukuran dilakukan setiap 3 detik sekali. Jadi semisal temperatur CPU pada detik pertama adalah 40'C, lalu pada detik ketiga adalah 72'C, dan seterusnya. Kalian bisa mengubahnya sesuai dengan kebutuhan kalian dengan ketentuan pada baris ke-4: d = hari, h = jam, m = menit, s = detik. Sedangkan pada baris ke-7 kalian bisa langsung ganti angkanya tanpa ada ketentuan lain.

Misal kalian ingin membuat log dengan lama perekaman per 2 hari lebih 3 jam 30 menit dan 5 detik, dengan interval waktu pengukuran temperatur setiap 5 detik sekali. Maka pada baris ke-4 kalian tulis 2d3h30m5s, dan pada baris ke-7 kalian tulis angkanya dengan 5. Itu saja.

Selain itu kalian juga bisa mengubah format nama file di baris 13. Kalian bisa hanya menulis tanggalnya saja, jamnya saja, atau kombinasi keduanya. Ketentuannya sederhana, %d = hari, %m = bulan, %Y = tahun, %H = jam (format 24 jam), %h = jam (format 12 jam), %M = menit, dan %S = detik. Kalian juga bisa menambahkan %p untuk menandai PM atau AM jika kalian menggunakan format waktu 12 jam. Ini secara otomatis muncul menyesuaikan dengan waktu di laptop/PC kalian. Setelah skrip selesai dibuat kalian bisa mencobanya langsung dengan perintah

bash tlog_script.sh

atau

./tlog_script.sh

Kalian sesuaikan dengan nama file skrip yang kalian buat.

Jalankan Otomatis

Jika skrip bash sudah berjalan sesuai, kalian bisa menjalankannya secara otomatis di laptop/PC kalian. Caranya letakkan file skrip bash yang sudah kalian buat tadi di direktori yang menurut kalian aman. MajestyTech Workshop memilih untuk menempatkan di /usr/sbin/ agar mudah dicari. Setelah itu kalian masuk direktori /etc/systemd/system/ dan buat sebuah file service disitu dengan nama terserah kalian yang mudah kalian ingat. Ketik di terminal:

nano temperature-log.service

Maka akan terbuka layar kosong, kalian tinggal isikan skrip berikut ini kemudian jika selesai, simpan dan tutup file skripnya.
temperature-log.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# /etc/systemd/system/temperature-log.service
#

[Unit]
Description=Temperature Log Sensors

[Service]
Type=oneshot
ExecStart=/bin/sh "/usr/sbin/tlog_script.sh"

[Install]
WantedBy=multi-user.target

Agar skrip tadi dapat segera dijalankan dan juga berjalan otomatis disaat booting, lakukan daemon-reload terlebih dahulu baru setelah itu kalian start service-nya.

systemctl daemon-reload
systemctl start temperature-log.service

Pastikan ketika dua perintah di atas diberikan, tidak ada pesan error atau pesan-pesan aneh muncul. Untuk memastikan kalian bisa cek dengan perintah:

systemctl status temperature-log.service

Dan muncul tampilan seperti ini:

Terlihat pada bagian yang diblok, skrip sudah aktif atau berjalan. Menandakan tidak ada masalah. Perintah terakhir berikan perintah ini:

systemctl enable temperature-log.service

Selesai. Kalian bisa coba restart laptop/PC kalian untuk lebih memastikan skrip sudah benar-benar running atau tidak. Harusnya jika tidak ada masalah ketika dicek tadi, maka skrip otomatis running ketika di awal boot atau saat kalian pertama menyalakan laptop/PC. File log tadi disimpan di direktori / . Kalian tinggal ketikkan di terminal cd / maka disitu ada file log temperatur seperti pada gambar paling awal di artikel ini.

GNU Plot

Bagian ini sebenarnya opsional. Fungsinya adalah untuk memvisualisasikan dari data log tadi menjadi grafik agar lebih mudah dibaca dan enak dilihat.

Kalian hanya perlu memasang/install paket gnuplot lalu membuat dua skrip lagi misal plot_day dan plot_time tanpa format apapun. Kemudian kalian simpan dua skrip tersebut satu direktori dengan skrip utama. Data temperatur terekstrasi menjadi gambar grafik secara otomatis. Skrip konfigurasi terdapat pada skrip utama di baris 37-46. Dan tambahan dua skrip adalah seperti ini:
plot_day
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
set terminal pngcairo size 1200,600 enhanced font 'Verdana'
set output sprintf('%s.png', filename)
set timefmt '%d/%m/%Y %H:%M:%S'
set xdata time
set format x '%m/%d'
set grid ytics lc rgb "#bbbbbb" lw 2 lt 1
set yr [20:100]
set title "Temperature log"
set xlabel "Date (month:day)"
set ylabel "degree Celcius"

plot "t_log.txt" using 7:1 with lines title "core:1" linewidth 3,\
     "t_log.txt" using 7:2 with lines title "core:2" linewidth 3 ,\
     "t_log.txt" using 7:3 with lines title "core:3" linewidth 3 ,\
     "t_log.txt" using 7:4 with lines title "core:4" linewidth 3 ,\
     "t_log.txt" using 7:5 with lines title "core:5" linewidth 3 ,\
     "t_log.txt" using 7:6 with lines title "core:6" linewidth 3
replot

plot_time
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
set terminal pngcairo size 1200,600 enhanced font 'Verdana'
set output sprintf('%s.png', filename)
set timefmt '%d/%m/%Y %H:%M:%S'
set xdata time
set format x '%H:%M:%S'
set grid ytics lc rgb "#bbbbbb" lw 2 lt 1
set yr [20:100]
set title "Temperature log"
set xlabel "Time (Hour:Minute:Second) "
set ylabel "degree Celcius"
plot "t_log.txt" using 7:1 with lines title "core:1" linewidth 3,\
     "t_log.txt" using 7:2 with lines title "core:2" linewidth 3 ,\
     "t_log.txt" using 7:3 with lines title "core:3" linewidth 3 ,\
     "t_log.txt" using 7:4 with lines title "core:4" linewidth 3 ,\
     "t_log.txt" using 7:5 with lines title "core:5" linewidth 3 ,\
     "t_log.txt" using 7:6 with lines title "core:6" linewidth 3
replot

Tidak banyak yang perlu diubah pada dua skrip ini. Kalian tinggal memerhatikan "t_log.txt", ubah dengan nama file log temperatur yang dihasilkan dari skrip utama. Kemudian kalian perhatikan juga tulisan "core:1" dst. sesuaikan dengan jumlah core CPU pada laptop/PC kalian. Jika hanya terdapat 4 core maka hapus baris 16-17 pada plot_day, dan baris 15-16 pada plot_time. Maka selesai sudah artikel ini.

Apabila kalian ada pertanyaan atau ada yang belum mengerti, tinggalkan komentar di artikel ini, atau kalian bisa kirim email maupun kontak Telegram MajestyTech Workshop. Terima kasih.


Referensi:
https://stackoverflow.com/questions/9725897/bash-script-use-cut-command-at-variable-and-store-result-at-another-variable
https://www.geeksforgeeks.org/cut-command-linux-examples/
https://www.redhat.com/sysadmin/exit-codes-demystified
https://askubuntu.com/questions/96957/where-can-i-find-the-log-file-of-my-system-temperature
https://reposcope.com/package/dateutils
https://forums.opensuse.org/showthread.php/534591-how-to-start-bash-script-application-on-boot-in-Opensuse-Leap-15
https://forums.opensuse.org/showthread.php/526253-Setting-up-cron-to-do-work
https://unix.stackexchange.com/questions/269858/does-linux-typically-log-system-temperature-data
https://www.suse.com/support/kb/doc/?id=000019672
https://gutherzig.wordpress.com/2011/10/24/tanggal-linux-sebagai-nama-file/
https://unix.stackexchange.com/questions/278939/how-do-you-put-date-and-time-in-a-file-name

Posting Komentar

0 Komentar