Go Back   HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials > Linux Forums > Server Operation

Do you like HowtoForge? Please consider supporting us by becoming a subscriber.
Reply
 
Thread Tools Display Modes
  #1  
Old 13th December 2006, 12:09
satimis satimis is offline
Senior Member
 
Join Date: Oct 2006
Posts: 533
Thanks: 4
Thanked 2 Times in 2 Posts
Default Dynamic IP and cron job

Hi folks,

Ubuntu-6.06.1-LAMP-server-amd64

I have a script.php which is used to update the IP address of my domain on registrar's website. I keep it on /etc/. The IP address of the server only changes on connection. Please advise how to create a "cron job" which will run the script after booting to update the IP address.

Is /etc/ the right directory for holding the script?

TIA

B.R.
satimis
Reply With Quote
Sponsored Links
  #2  
Old 13th December 2006, 12:48
sjau sjau is offline
Local Meanie
 
Join Date: Apr 2006
Location: Switzerland
Posts: 1,146
Thanks: 4
Thanked 55 Times in 51 Posts
Default

Have a look at this (I think this also goes for Ubuntu)

http://www.debian-administration.org/articles/28

1) Basically you create the script in /etc/init.d/ip_update
2) Make it executable
3) Symlink it to the according runlevels (on that website the K means as much as Kill and S means as much as Start... the number is the sequence of starting/killing in that runlevel)
Reply With Quote
  #3  
Old 13th December 2006, 13:34
satimis satimis is offline
Senior Member
 
Join Date: Oct 2006
Posts: 533
Thanks: 4
Thanked 2 Times in 2 Posts
Default

Hi sjau,

Tks for your advice and URL.

The script.php was download from the site where I registered the domain. I don't think they allow third party program. There is a short instruction on the file download instructing running the script.php on cron.

B.R.
satimis
Reply With Quote
  #4  
Old 13th December 2006, 13:50
sjau sjau is offline
Local Meanie
 
Join Date: Apr 2006
Location: Switzerland
Posts: 1,146
Thanks: 4
Thanked 55 Times in 51 Posts
Default

Well, the content of your boot-up script could be:

Code:
#!/bin/sh
lynx /path/to/php-script.php
And then you would symlink it only in the starting processes R2-5 I think...
Just make sure, you also have lynx installed...
Reply With Quote
  #5  
Old 14th December 2006, 06:31
satimis satimis is offline
Senior Member
 
Join Date: Oct 2006
Posts: 533
Thanks: 4
Thanked 2 Times in 2 Posts
Default

Hi sjau,

Content of the script;
<?
//* Package: changeip.com Auto IP updater
//* Version 1.1
//* System Requirements: Linux, (PHP 3, PHP 4 >= 4.0.0)
//* and the ability to run crontabs
//* File: update.php

-snip-

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////BRIEF OVERVIEW PLEASE READ //////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*
//*
//* This script will update your dynamic ip address by the use of a cron job. There are two ways this script can
//* be used.
//*
//* 1. No Router, This is if your PC Running Linux is connected directly to your ISP. Using this setup option will
//* allow you to set the cron job to run every few minutes. Only when your IP changes an update will be sent.
//*
//* NOTE: IF YOUR CRON JOB IS SET TO EVERY FEW MINUTES SET YOUR EMAIL OPTIONS TO "0" Or you will fill the log file
//* along with your email box.
//*
//* 2. Router, - snip -
//*
//* NOTE: If you are on a CABLE MODEM or DSL your IP
-snip-
//* IF YOUR CRON JOB IS SET TO EVERY FEW MINUTES SET YOUR EMAIL OPTIONS TO "0" Or you will fill the log file
//* along with your email box.
//*
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////CHECK YOUR CHANGEIP.COM SETTINGS ////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

//* 1. Make Changes to your domains so that ALL Options update on SET 1. The first column of check boxes.
//*
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// SETUP INSTRUCTIONS ///////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*
//* 1. Edit the variables below in this file to match your server and your needs.
//* 2. Upload update.php and updatedns.log to your root web.
//* 3. chmod updatedns.log to 666
//* 3. Create a cron job to execute update.php. See the following example.
//*
//* Telnet into your server create a new cronjob. The following would
//* run every night at 12:59pm. Depending on your needs you will have
//* to modify the run time variables.
//*
//* 59 23 * * * wget -q http://www.yoursite.com/update.php
//*
//* minute (0-59)
//* hour (0-23)
//* day of the month (1-31)
//* month of the year (1-12)
//* day of the week (0-6 with 0=Sunday)
//*
//* NOTE: A cron can also be setup using WEBMIN if you have it installed. This is easyier for most.
//*
//*
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// SETUP OPTION DESCRIPTIONS DO NOT EDIT THESE HERE //////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

//* $username = "changeip.com login username";
//* $password = "changeip.com login password";
//*
//* $Adminemail = "you@yourdomain.com";
//* $Sendmail = "/path/to/sendmail -t -i";
//*
//* $Logfile = "/full/server/path/to/updatedns.log";
//*
//*
////////////////////////////////////////// IF USING A ROUTER ////////////////////////////////////////////////
-snip-
////////////////////////////////////// NO ROUTER, DIRECT CONNECTION /////////////////////////////////////////
//*
//*
//*
//* $Log1 = "0"; No log file output
//* $Log1 = "1"; Appends a new line to the log file ONLY when a update is sent to changeip.com
//* $Log2 = "0"; No log file output
//* $Log2 = "1"; Appends a new line to the log file even when there is no update sent to changeip.com
//* $Email1 = "0"; No Email Will be sent
//* $Email1 = "1"; Sends an email to the address specified. when a update is sent to changeip.com
//* $Email2 = "0"; No Email Will be sent
//* $Email2 = "1"; Sends an email to the address specified. when a update is sent to changeip.com
//*
//* $IPfile = "/full/server/path/to/updatednsIP.log"; <--- This is not an option if using direct connect
//* $Logfile = "/full/server/path/to/updatedns.log";
//*
//*
//*
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////<-------- EDIT USER VARIABLES HERE --------> ////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

$Bypass = "0";

$username = "username";
$password = "password";

$Adminemail = "you@yourdomain.com";
$Sendmail = "/path/to/sendmail -t -i";

$IPlogfile = "/full/server/path/to/updatednsIP.log";
$Logfile = "/full/server/path/to/updatedns.log";

$Log1 = "1";
$Email1 = 1;

$Log2 = "1";
$Email2 = 1;

$Log3 = "1";
$Email3 = "1";

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////<--------- END USER VARIABLES --------> /////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING//////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

$UPDATEURL = "https://www.changeip.com/dynamic/dns/update.asp?u=$username&p=$password&cmd=update&set= 1&offline=0";


if ($REMOTE_ADDR == "") $Boxaddress = "Server address Unknown";
else $Boxaddress = $REMOTE_ADDR;

$tdate = date("h:i:s");
$datecode = date("m-d-Y");

if($Bypass == "0"){


if (file_exists($IPlogfile)){

$file=file("$IPlogfile","r");
foreach($file as $line){
list($Lastip,$blank) = split("\:",chop($line));
if($Lastip != $REMOTE_ADDR){


header("location: $UPDATEURL");

$createFile = fopen("$IPlogfile", "w");
fwrite($createFile,"$REMOTE_ADDR:\r\n");
fclose($createFile);

if($Log1 == "1"){
$filelog = fopen("$Logfile", "a");
flock($filelog, 2);
fputs($filelog,"DNS Update set 1, Current IP: $REMOTE_ADDR, Previous IP: $Lastip, Date: $datecode, Time: $tdate. Update Successful\r\n");
flock($filelog, 3);
fclose($filelog);
}

if($Email1=="1"){

$to = "$Adminemail";
$subject = "IP Auto update Report";
$body ="Hello, $username\r\n\r\nYour IP address has changed and an update request was sent to changeip.com.\r\n\r\n Current IP: $REMOTE_ADDR\r\n Previous IP: $Lastip\r\n Time: $tdate\r\n Date: $datecode\r\n\r\nChangeip.com IP Auto Updater by Djobes@Internet-demon.com";

$mailer = popen($Sendmail,"w") or die ("error writing");
fwrite ($mailer,"Subject: $subject\nFrom: \"Changeip-AutoUpdater\" $Adminemail\nTo: $to\n\n$body");
pclose($mailer);
}

}
}
}


else
{
header("location: $UPDATEURL");

$createFile = fopen("$IPlogfile", "w");
fwrite($createFile,"$REMOTE_ADDR:\r\n");
fclose($createFile);

if($Log1 == "1"){
$filelog = fopen("$Logfile", "a");
flock($filelog, 2);
fputs($filelog,"DNS Update set 1, Current IP: $REMOTE_ADDR, Previous IP: Unknown, Date: $datecode, Time: $tdate. Update Successful\r\n");
flock($filelog, 3);
fclose($filelog);
}

if($Email1=="1"){

$to = "$Adminemail";
$subject = "IP Auto update Report";
$body ="Hello, $username\r\n\r\nYour IP address has changed and an update request was sent to changeip.com.\r\n\r\n Current IP: $REMOTE_ADDR\r\n Previous IP: Either this is the first time you run this script or you deleted the updatednsip.log. This is normal\r\n Time: $tdate\r\n Date: $datecode\r\n\r\nChangeip.com IP Auto Updater by Djobes@Internet-demon.com";

$mailer = popen($Sendmail,"w") or die ("error writing");
fwrite ($mailer,"Subject: $subject\nFrom: \"Changeip-AutoUpdater\" $Adminemail\nTo: $to\n\n$body");
pclose($mailer);
}
}



if($Lastip == $REMOTE_ADDR){

if($Log2 == "1"){
$filelog = fopen("$Logfile", "a");
flock($filelog, 2);
fputs($filelog,"DNS Update set 1, Current IP: $REMOTE_ADDR, Previous IP: $REMOTE_ADDR, Date: $datecode, Time: $tdate. No Update Required\r\n");
flock($filelog, 3);
fclose($filelog);
}

if($Email2=="1"){

$to = "$Adminemail";
$subject = "IP Auto update Report";
$body ="Hello, $username\r\n\r\nYour IP address did not change since the last update.\r\nThere was no need to send a update request to changeip.com\r\n\r\n Current IP: $REMOTE_ADDR\r\n Previous IP: $Lastip\r\n Time: $tdate\r\n Date: $datecode\r\n\r\nChangeip.com IP Auto Updater by Djobes@Internet-demon.com";

$mailer = popen($Sendmail,"w") or die ("error writing");
fwrite ($mailer,"Subject: $subject\nFrom: \"Changeip-AutoUpdater\" $Adminemail\nTo: $to\n\n$body");
pclose($mailer);
}
}
}

if($Bypass == "1"){

header("location: $UPDATEURL");

if($Log3 == "1"){
$filelog = fopen("$Logfile", "a");
flock($filelog, 2);
fputs($filelog,"DNS Update set 1, Current IP: $REMOTE_ADDR, Date: $datecode, Time: $tdate. Update Successful\r\n");
flock($filelog, 3);
fclose($filelog);
}

if($Email3=="1"){

$to = "$Adminemail";
$subject = "IP Auto update Report";
$body ="Hello, $username\r\n\r\nYour IP has been updated,\r\n\r\n Current IP: $REMOTE_ADDR\r\n Time: $tdate\r\n Date: $datecode\r\n\r\nChangeip.com IP Auto Updater by Djobes@Internet-demon.com";

$mailer = popen($Sendmail,"w") or die ("error writing");
fwrite ($mailer,"Subject: $subject\nFrom: \"Changeip-AutoUpdater\" $Adminemail\nTo: $to\n\n$body");
pclose($mailer);
}
}

?>s
Reply With Quote
  #6  
Old 14th December 2006, 10:51
sjau sjau is offline
Local Meanie
 
Join Date: Apr 2006
Location: Switzerland
Posts: 1,146
Thanks: 4
Thanked 55 Times in 51 Posts
Default

Just get lynx (a text based browser) and then do a call of your php script through lynx... alternatively you can setup a cron where you invoke the php binary with the php script but right now I have no clue how to do that
Reply With Quote
  #7  
Old 14th December 2006, 13:04
satimis satimis is offline
Senior Member
 
Join Date: Oct 2006
Posts: 533
Thanks: 4
Thanked 2 Times in 2 Posts
Default

Hi sjau,

Quote:
Just get lynx (a text based browser) and then do a call of your php script through lynx...
I have lynx running on this server. But I'm not experienced on text browser.

$ sudo lynx /usr/local/bin/update.php
started a blank page with following line on screen:-
Code:
application/x-httpd-php  D)ownload, or C)ancel
Pressed D (download)
Code:
Download Options (Lynx Version 2.8.5rel.1), help

Downloaded link: file://localhost/usr/local/bin/update.php
Suggested file name: update.php

Standard download options:
   Save to disk

Local additions:
So I have to quit

re-run
$ sudo lynx /usr/local/bin/update.php
same screen displayed. Pressed "C" (cancel)
Code:
$ sudo lynx /usr/local/bin/update.php

Can't Access `file://localhost/usr/local/bin/update.php'
Alert!: Unable to access document.

lynx: Can't access startfile

Having previously performed following test;

$ apt-get install sendmail
After installation completed "sendmail" became MTA and "postfix" did not work anymore. It is completely out of my control.

My intention is just installing "sendmail" and retaining "postfix" as MTA. Because following line needs "sendmail"

Edited /usr/local/bin/update.php
Code:
.......
.....
////////////////////////////////<-------- EDIT USER VARIABLES HERE --------> //////////////////////$///////////////////////////////////////////////////////////////////////////////////////////////////$
$Bypass = "0";

$username = "satimis";
$password = "xxxxxxx";

$Adminemail = "satimis@satimis.freeddns.com";
$Sendmail = "/usr/sbin/sendmail -t -i";

$IPlogfile = "/var/log/updatedns/updatednsIP.log";
$Logfile = "/var/log/updatedns/updatedns.log";

$Log1 = "1";
$Email1 = 1;

$Log2 = "1";
$Email2 = 1;

$Log3 = "1";
$Email3 = "1";

///////////////////////////////////////////////////////////////////////////////////////////////////$////////////////////////////////<--------- END USER VARIABLES --------> ///////////////////////////$
...
.....
Remark:
Code:
 -t     Read  message  for recipients.  To:, Cc:, and Bcc: lines will be
              scanned for recipient addresses.  The Bcc: line will be  deleted
              before transmission.


-i     Ignore dots alone on lines by themselves in  incoming  messages.
              This should be set if you are reading data from a file.
On console/terminal
$ sudo php /usr/local/bin/update.php
Code:
Warning: file() expects parameter 2 to be long, string given in /usr/local/bin/update.php on line 183

Warning: Invalid argument supplied for foreach() in /usr/local/bin/update.php on line 184
$ cat /usr/local/bin/update.php
Code:
.....
..........
        if($Bypass == "0"){


                if (file_exists($IPlogfile)){

                        $file=file("$IPlogfile","r");		(line 183)
                        foreach($file as $line){			(line 184)
                        list($Lastip,$blank) = split("\:",chop($line));
                                if($Lastip != $REMOTE_ADDR){


                        header("location: $UPDATEURL");

                        $createFile = fopen("$IPlogfile", "w");
                        fwrite($createFile,"$REMOTE_ADDR:\r\n");
                        fclose($createFile);

                if($Log1 == "1"){
....
......
Quote:
alternatively you can setup a cron where you invoke the php binary with the php script
Yes, even if the script runs without problem I have to run cron in combination. Because the connection is on 24 hrs basis, I suppose.


If there is no solution I'll come back to satimis.homelinux.com" of dyndns.org/com making it to work. This server is for test not for production.

"satimis.freeddns.com" is working seamlessly apart the IP address has to be updated manually on connection. "Ping it" and "satimis.freeddns.com:8080 browsing homepage" both work without problem.


P.S. Is there any way to make "postfix" as MTA again instead of running;
$ sudo apt-get remove sendmail

TIA


B.R.
satimis
Reply With Quote
  #8  
Old 14th December 2006, 14:22
sjau sjau is offline
Local Meanie
 
Join Date: Apr 2006
Location: Switzerland
Posts: 1,146
Thanks: 4
Thanked 55 Times in 51 Posts
Default

ok, I assume that your PHP file is running fine.

Put it into your a webfolder and call it then through your browser. Check that it's loaded fine, no errors and stuff...

Once you have done that, you can do use Lynx:

Code:
lynx http://localhost/path/to/file.php
Lynx will then behave the same as your browser and call it... and if the script is running fine, then it will do what it's supposed to
Reply With Quote
  #9  
Old 14th December 2006, 14:35
edge edge is offline
Moderator
 
Join Date: Dec 2005
Location: The Netherlands
Posts: 2,037
Thanks: 268
Thanked 152 Times in 132 Posts
Default

You can also execute PHP directly on your server (so no need for lynx)

Lets say you want to run script.php than all you need to type is php script.php You will need to be in the directory where script.php is located.

I guess you can also run php /location/of/script/script.php

Last edited by edge; 14th December 2006 at 14:39.
Reply With Quote
  #10  
Old 14th December 2006, 15:27
satimis satimis is offline
Senior Member
 
Join Date: Oct 2006
Posts: 533
Thanks: 4
Thanked 2 Times in 2 Posts
 
Default

Hi edge,

Quote:
You can also execute PHP directly on your server (so no need for lynx)

Lets say you want to run script.php than all you need to type is php script.php You will need to be in the directory where script.php is located.

I guess you can also run php /location/of/script/script.php
Yes, your are correct. I did it before. Pls see my posting on #7

On console/terminal
$ sudo php /usr/local/bin/update.php

It ran without problem but the IP address on changeip.com can't be updated.
Also I don't understand how to fix the problem on the script re;

$ sudo php /usr/local/bin/update.php
Password:
Code:
Warning: file() expects parameter 2 to be long, string given in /usr/local/bin/update.php on line 183

Warning: Invalid argument supplied for foreach() in /usr/local/bin/update.php on line 184
Lines 183 and 184
# cat /usr/local/bin/update.php
Code:
.....
.....
                if (file_exists($IPlogfile)){

                        $file=file("$IPlogfile","r");                                (line 183)
                        foreach($file as $line){                                  (line 184)
                        list($Lastip,$blank) = split("\:",chop($line));   
                                if($Lastip != $REMOTE_ADDR){


                        header("location: $UPDATEURL");

                        $createFile = fopen("$IPlogfile", "w");
                        fwrite($createFile,"$REMOTE_ADDR:\r\n");
                        fclose($createFile);
....
.....
Besides postfix is now not working. sendmail takes its place as MTA. I need to restore postfix without clue. Any suggestion?

B.R.
satimis
Reply With Quote
Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 05:21.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.