Saturday, 17 October 2015

DARIPADA NGELAMUN MENDING BUAT DAEMON YUK COY AHELAH

Dah tau kan Daemon itu apa?
Kalo belom: https://en.wikipedia.org/wiki/Daemon_(computing)
Disini saya cuma bakal jelasin cara membuat daemon di linux. Easy lah. :^)


THE GIST OF IT :
1. Melakukan proses Forking
2. Mengganti File Mode menjadi mask
3. Membuat Unique Session ID
4. Mengganti working directory
5. Menutup Standard File Descriptor (STDIN, STDOUT, STDERR)
6. Memasukan Code tujuan pembuatan Daemon


EXPLANATION:

Jangan lupa sebelum memasukan code dibawah ini untuk memanggil library yang digunakan

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <unistd.h>
    #include <syslog.h>
    #include <string.h>


1. Melakukan proses Forking.


 Daemon bisa dijalankan oleh system maupun user sendiri melalui terminal atau melalui script. Saat mulai dijalankan, processnya seperti executable pada system. Caranya adalah dengan melakukan forking.

    pid_t pid;

            /* Fork off the parent process */       
            pid = fork();
            if (pid < 0) {
                    exit(EXIT_FAILURE);
            }

            /* If we got a good PID, then
               we can exit the parent process. */

            if (pid > 0) {
                    exit(EXIT_SUCCESS);
            }


Fungsi Fork() diatas mengembalikan sebuah value, dimana jika fungsi Fork gagal dalam melakukan tugasnya, ia akan mengembalikan nilai -1 dan daemon berhenti saat itu juga. Namun, jika fungsi Fork berhasil, ia akan mengembalikan nilai PID dari children process.

2. Mengganti Filemode menjadi Mask


Untuk melakukan write file oleh daemon (misal pembuatan log) , maka harus dilakukan penggantian file mode menjadi mask agar file yang dibuat bisa dibaca dan di-write secara benar.

    umask(0);

 3. Membuat Unique Session ID

 Agar child process hasil fork tadi dapat beroperasi, dibutuhkan untuk membuat Unique Session ID

    pid_t sid;

    /* Create a new SID for the child process */
            sid = setsid();
            if (sid < 0) {

                    /* Log any failure */
                    exit(EXIT_FAILURE);
            }


Tipikal return valuenya kayak pas forking gitu.

4. Mengganti working directory

Karena kita mau menggunakan directory yang selalu ada maka kita bisa menggunakan root (/) bisa juga sih directory yang lain.

    if ((chdir("/")) < 0) {
                    /* Log any failure here */
                    exit(EXIT_FAILURE);
            }


Return value masih kayak biasa

5. Menutup Standard File Descriptor (STDIN, STDOUT, STDERR)
Biasanya daemon tidak menggunakan terminal, jika anda tidak ingin daemon untuk menggunakan terminal gunakan code dibawah ini:

       close(STDIN_FILENO);
     close(STDOUT_FILENO);
     close(STDERR_FILENO);
6. Memasukan Code tujuan pembuatan Daemon

 Nah kita tau kalo daemon itu processnya terus menerus mengulang kan? Nah untuk itu kita menggunakan loop while(1) untuk melaksanakan process inti dari daemon.

Here's the thing, Seperti yang kita tau seluruh program kita akan di save dalam .c dimana ("menurut gw") menggunakan C buat akses file, directory, move directory is a PAIN. Jadi bisa aja kalian buat 1 file pihak ketiga dengan bash yang dijalankan oleh system seperti dibawah ini.

    while(1){
               system("./test.sh");
               sleep(30); /* wait 30 seconds */
            }


Contoh diatas itu menunjukan kalo kita ingin melakukan run terhadap file test.sh yang dicode menggunakan bash. Sure, cara ini memang terkesan agak malas. Tapi ya, itu hanya tips agar programming lebih simple aja (at least menurut saya). But still, jika anda ingin menggunakan C secara utuh juga bisa. OR..... mix a little bit of both?

    while(1) {  
               system("mv test.txt testnew.txt");
               sleep(30); /* wait 30 seconds */
            }


Code diatas digunakan untuk melakukan rename test.txt menjadi testnew.txt. Di code ini kalian tidak perlu membuat file .sh satu lagi, but in the same time, anda juga menggunakan bash (which is a lot easier in this case). Namun cara ini memiliki flaw, seperti misalnya anda hanya bisa memasukan fungsi fungsi yang biasa diakses di terminal. Jika kalian mau menulis code panjang dengan pengulangan percabangan dll. Yang pastiya tida bisa dengan melakukan cara diatas. Better stick with that third party file or C :^)


Setelah filenya kamu simpan di C
Lakukan code ini untuk membuat file daemonnya di terminal
gcc -o daemon.o test.c


Kalian akan membuat daemon.o dari file test.c , setelah terbuat file .o run file lewat terminal dengan mengetik "./daemon.o"
Jadi ya gitu, pretty easy rite? Cobain daahh. Until Next Time

No comments:

Post a Comment