How To Create A Daemon In Linux?

0 comments

Recently we struck up with a problem. The problem is to run a script continuously in background and continuously check for a folder content changes. If any modifications are done in that folder, the script once again should start one more script. We thought of doing this by using crontab. But the problem with crontab is we have to wait at least one minute to run our script. One minute is too long for my requirement. We require a solution which runs continuously in background at every micro second, it should be similar to a normal Linux daemon such as httpd, ssh, ftp etc. I have searched in Google for creating daemons in Linux. But most of the people suggested to write a daemon in C language, which is alien to me(I have learnt C language some 9 years back but now totally forgot it :( ). Here is one such link which will describe you how to create a daemon in Linux using C programming.

http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html. 

I went through many documentations and other stuff but come to a conclusion to go with Shell script. Which will work same as daemon. Here is the code for the daemon which we accomplish using while loop

while true;
do
if [ -f /testing/*.txt ]
then
echo "file created"
mv /testing/*.txt /tst/
fi
done

This while loop continuously runs because we give condition as true for this while loop and then written a if statement what to do. Once you create above script there are other points to mention, such as below once to make above script as a daemon..



So how to run the above script?
Ans : Use nohup when running the script. For those people who don't know nohup command here is the explnation. 
nohup is a command to run a program thought you logout from the machine. For example here is my script with nohup. 

nohup sh daemon.sh 

But some times this will not work. At that time run this script from crontab once and then remove the entry from crontab. 


So how to make this permanent?
Ans : Its simple. keep your script in /etc/init.d with execute permissions

cp /path/to/script/daemon.sh /etc/init.d/
chmod +x /etc/init.d/daemon.sh

Then create a link file to this script to the corresponding run-level. This is required at the time of booting.


ln -s /etc/init.d/daemon.sh /etc/rc.d/rc3.d/S43daemon.sh
ln -s /etc/init.d/daemon.sh /etc/rc.d/rc3.d/K43daemon.sh



What are those above two command will do?
Ans : The S43 will tell the system to start the script as 43 script when it boots up. 
The K43 will tell the system to shutdown cleanly when you do a shut down. 


Please share your thoughts if you have better idea to do it:-)

  • Like the post? Please Subscribe to free RSS feed to get updates
  • How to: Linux Group Disk Quota Implementation

    0 comments

    Click here If you are looking for implementing user disk quota implementation in linux. Here in this post we are now going to discus how to implement Linux Group quota for a project?
    Many people will ask why we require group quota if we have user quota?

    I will explain this with an example. In companies people will be working on projects/groups where they want to share their data on a common location and accessed by any user for that group. Its some thing like group store where they will be dumping data on a single location. So its very much easy to restrict per group basis on this group store, so we can set some limit on all the users in that group on how much they can upload to that folder. We will take one example to accomplish this group quota.

    group name : project1.
    group members : user1, user2, user3.
    group dump folder/common folder to the above mention users : /home/project1 (/dev/hda2).
    group disk quota limit : 100MB soft/110MB hard limit

    Now we have all the ingredients to prepare spicy food :)

    Implementing Group disk quota on Linux

    Step1 :
    Create a group
    #groupadd project1

    Step2 : Create all the require users with their home directory /home/project1 and group as
    project1
    #useradd -c "Testing group quota implementation" -m -d /home/project1 -g project1 user1
    #useradd -c "Testing group quota implementation" -m -d /home/project1 -g project1 user2
    #useradd -c "Testing group quota implementation" -m -d /home/project1 -g project1 user3

    Step3 : Select/prepare the partition for quota here my partition is /dev/hda2 so edit /etc/fstab file for with the required entries.

    vi /etc/fstab /dev/hda2 /home ext3 defaults,usrquota,grpquota 0 0
    save and exit the file

    Step4 : Now remount the partition with rw permissions
    #mount -o remount,rw /home

    Step5 :
    Now create group quota database
    #quotacheck -cug /home
    check for user/group database is created or not when you give ls /home you can see

    aquota. user, aquota.group files in /home directory,which contains user and group databases.

    Step6 : Once the above command executed successfully, check quota is implemented or not.
    #repquota -a

    Step7 :
    Now set quota for the group project1, this can be done using edquota or setquota. Most of the people know edquota command usage when executed it will open a temporary quota file where we have to mention your desired values. But in this I am going to show you another way to set group quota.
    #setquota -g project1 100 110 0 0 /dev/sda2

    Explanation of above command.
    -g specifies we are going to edit group quota.
    The group name is project1
    We are setting setting soft(100kb) and hard limit(110kb) on blocks
    We disabled setting soft(0) and hard(0) limit on inodes
    Last we specified on what partition we are going to set this quota(/dev/sda2)

    Step8 : Don't think its completed. This is the most and main important point you have remember when implementing group quota. We have to set permission to /home/project1 with SGID so that all the members in the group can able to upload data to /home/project1 with out any issue.
    #chmod 2770 /home/project1

    Now all the group members of project1 can upload total of 100kb not more than that. For example user1 uploaded 75kb so members of project1 can only upload 25kb more.

  • Like the post? Please Subscribe to free RSS feed to get updates
  • How To : Auto Logout

    0 comments

    What is this auto logout?
    Ans : Auto logout is a concept to force user to logout from the remote server. If the open session to remote server is idle for a given time.


    So why actually we require auto logout?
    Ans : As a security measure, This is good practice to set this, because its not a good idea/practice to keep open terminal idle.


    How to accomplish this?
    Ans : This can be achieved by two ways.

    1. Open /etc/profile and append TMOUT variable. See my below example

    Export TMOUT=600 # 10 minutes in seconds
    typeset -r TMOUT
    This will set time-out to 600 sec(ie 10mins) and I have given typeset -r which read-only and will not allow users to change this. Save the file and exit.



    2. By creating /etc/profile.d/sessiontimout.sh file then keeping above mention entries in it.
    Export TMOUT=600 # 10 minutes in seconds
    typeset -r TMOUT
    Now save and exit the file

    As this is a script we have to change the permissions too.
    #chmod +x /etc/profile.d/sessiontimout.sh

    Please share your thoughts on this.

  • Like the post? Please Subscribe to free RSS feed to get updates
  • Archive

    Translate this page

     

    The Linux Juggernaut | Copyright 2006-2009 Surendra Kumar Anne | Surendra's Home Page | Give us feedback how we are doing, Click here