Untuk membuat Daemon, pertama-tma kita harus mengetahui apa itu Daemon. Daemon adalah sebuah proses yang bekerja pada background karena proses ini tidak memiliki terminal pengontrol. Dalam sistem operasi Windows biasanya lebih dikenal dengan sebutan service. Daemon adalah sebuah proses yang didesain supaya proses tersebut tidak mendapatkan intervensi dari user. Daemon biasanya bekerja dalam jangka waktu yang sangat lama dan bertugas menerima request dan menjalankan responsnya. Contoh dari daemon ini misalnya adalah Apache Web Server HTTP daemon. Daemon ini bekerja pada background dan menerima request HTTP pada port tertentu (biasanya 80 atau 8080) dan memberikan
respon terhadap request tersebut, berdasarkan tipe dari request tersebut.
Adapun hal-hal yang membedakan daemon dengan proses lainnya adalah: daemon tidak memiliki parent proses ID, daemon tidak memiliki pengontrol baik itu STDOUT, STDIN, maupun STDERR, dan daemon berjalan dalam previlege super user
Berikut ini adalah beberapa cara untuk membuat daemon:
1. Forking dan pembunuhan Proses induk.
Langkah pertama dari pembuatan daemon adalah dengan menspawn proses menjadi induk dan anak dengan melakukan forking, kemudian membunuh proses induk. Proses induk yang mati akan menyebabakan sistem operasi mengira bahwa proses telah selesai sehingga akan kembali ke terminal user. Dari langkah tersebut kita akan mendaptkan sebuah proses anak yang melanjutkan program setelah induknya mati, sehingga kita mendapatkan sebuah proses yang hampir bekerja pada background
Contoh :
pid_t pid,sid;
pid=fork();
if(pid < 0)
{
exit(EXIT_FAILURE);
}
if(pid > 0)
{
exit(EXIT_SUCCESS);
}
umask(0);
2. Membuat proses bekerja secara independen
Daemon harus bekerja secara independen daripada proses-proses lain, termasuk juga proses yang menjalankannya. Langkah bisa dilakukan dengan memanggil fungsi setsid(), sehingga proses akan mendapatkan sebuah session ID yang baru.
Contoh :
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
3. Menutup standar I/O deskriptor yang diwarisi
Untuk mencegah terjadinya intervensi dari user serta untuk pengamanan, maka standar I/O descriptor dan descriptor yang diwarisi dari proses induk harus ditutup. Ada 3 jenis standar I/O descriptor : STDIN (standar input), STDOUT (standar output), STDERR (standar error).
Contoh:
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
4. Melakukan masking pada File Creation
Sebagian besar daemon bekerja dalam previlege super user. Daemon biasanya memproteksi setiap file yang dibuat, dengan alasan keamanan. Fungsi umask() akan mencegah file-file previleges yang tidak aman dalam setiap pembuatan file.
Contoh :
pid_t pid,sid;
pid=fork();
if(pid < 0)
{
exit(EXIT_FAILURE);
}
if(pid > 0)
{
exit(EXIT_SUCCESS);
}
umask(0);
5. Running Directory
Directory kerja daemon haruslah sebuah directory yang selalu hidup. Bisa saja pada saat starting working directorynya pada saat itu berada pada user home. Karena daemon bekerja sampai sistem reboot, maka file sistem user directorynya takkan pernah bisa di unmount.
Contoh :
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
if((chdir(“/home/assassin/modul2/shift2.1/”)) < 0)
{
exit(EXIT_FAILURE);
}
6. Mendengarkan signal
Sebenarnya tugas utama dari daemon adalah mendengatkan requst. Maka sidalam daemon haruslah terdapat pendangar signal yang dapat merespon ketika daemon dikirimi signal tertentu, hal ini dapat dilakukan dengan meamnggil fungsi signal() untuk menginstall sebuah signal listener. Perlu kita ketahui bahwa signal 15 (SIGTERM) dan signal 9 (SIGKILL) tidak dapat ditangkap oleh signal handler.
7. Logging
Karena daemon tidak memiliki terminal pengontrol maka satu-satunya cara untuk mengetahui apa saja yang terjadi pada daemon tersebut maka hanya degan cara logging. Logging sendiri digunakan untuk menulis suatu pesan dari daemon untuk mendebug kesalahan yang terjadi. Logging harus banyak dilakukan oleh daemon untuk memberikan user maupun programmaer inforamasi-informasi sebaik mungkin. Berikut ada beberapa cara untuk melakukan logging :
Ø Metode Log File
Semua file ditulis kedalam sebuah file tertentu yang diatur oleh file konfigursi daemon tersebut. Melakukannya dengan memanggil fungsi fopen().
Ø Metode Log Server
Untuk keluarga UNIX mereka meimiliki daemon khusus yang digunakan untuk logging yaitu syslogd. Daemon ini mengelompokkan pesan-pesan menjadi beberapa kelompok yang disebut facility, kemudian kelompok-kelompok ini dapat dikirim ke tempat-tempat yang berbeda, misalnya langsung dikirim ke sysadmin lewat e-mail, dikirimkan kepada semua console terminal yang sedang log in, atau ditulis dalam suatu file logger.konfigurasi dari daemon syslogd ini dapat ditulis dalam sebuah file /etc/syslog.conf.
Komentar
Posting Komentar