Archive for the Scripting Category

$ curl ifconfig.me
205.123.111.222

$ dig +short myip.opendns.com @resolver1.opendns.com
205.123.111.222

$ curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"
205.123.111.222

$ curl -s http://checkip.dyndns.org | sed 's/[a-zA-Z<>/ :]//g'
205.123.111.222

 

Watching ESXi VMware Server Logs

| February 26th, 2015

Easy monitoring script for checking ESXi VMware logs:

 Log into the ESXi host console via ssh and create a script called “monitorlog.sh”
# cd /var/log
# vi monitorlog.sh
while :
do
  clear
  echo "Current time: date"
  tail -10 vmksummary.log|grep heartbeat|tail -1|awk '{print $2, $3 "     Uptime: "$4 "    Total VMs: "$5}'
  echo  "======================================================="
  echo
  echo "Last 15 lines of : vmkernel.log"
  echo "-------------------------------------------"
  tail -100 vmkernel.log|grep -v " H:0x0 D:0x2 P:0x0 Valid sense data"|tail -15
  echo
  echo "Last 15 lines of : hostd.log"
  echo "-------------------------------------------"
  tail -200 hostd.log|egrep "trivia|info|error"|tail -15
  echo
  echo "Last 5 lines of : vmkwarning.log (Today's date only)"
  echo "-------------------------------------------"
  tail -5 vmkwarning.log|grep date '+%Y-%m-%d'
  echo
  echo "Sleeping 30 sec..."
  sleep 25
  echo "Refreshing in 5 sec..."
  sleep 5
done

Just run it and keep an eye on anything out of the norm.  Change as needed of course.

./watchlog.sh

Sticking <script></script> tags referring an external resource in the middle of your HTML code will hang the loading of your page while your browser gets the missing script.

This is usually a problem with the loading of the AddToAny sharing script and a quantcast tag (which has since been removed). Check to make sure there are no other custom scripts that are slowing down your site.

The solution is generic and simple. Use this code to load your Javascript asynchronously:

<script type="text/javascript">

(function() {
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.async = true;
    s.src = 'http://yourdomain.com/script.js';
    var x = document.getElementsByTagName('script')[0];
    x.parentNode.insertBefore(s, x);
})();

</script>

Instead of loading it synchronously:

<script type="text/javascript" src="http://yourdomain.com/script.js"></script>

One thing to consider is that asynchronous loaded Javascript will not block jQuery’s document.ready handlers. Synchronous scripts will. If your jQuery code depends on a plugin (e.g., the simple modal dialog) it may be better to load it synchronously instead.

Using the script provided below you will be able to make automatic backup of your hosting account (domains and MySQL databases). This backup script includes SSL support. This is not necessary if you run the script on the server for which you are generating the backup; but the SSL support could be important if you are running the script somewhere else to connect to your cPanel hosting account.

<?php

// PHP script to allow periodic cPanel backups automatically, optionally to a remote FTP server. 
// This script contains passwords. It is important to keep access to this file secure (we would
// ask you to place it in your home directory, not public_html).  You need to create a 'backups'
// folder in your home directory ( or any other folder that you would like to store your backups in ).

// ********* THE FOLLOWING ITEMS NEED TO BE CONFIGURED ********* 
// Information required for cPanel access 

$cpuser = "username"; // Username used to login to cPanel 
$cppass = 'password'; // Password used to login to cPanel.
// You could face some issues with the "$#&/" chars in the password, so if this script does not work,
// try to change the password.
$domain = "example.com";// Your main domain name 
// Set to cPanel skin you use (script will not work if it does not match). Most people
//run the default "x" theme or "x3" theme
$skin = "x"; 

// Information required for FTP host 
$ftpuser = "ftpusername"; // Username for FTP account 
$ftppass = 'ftppassword'; // Password for FTP account
$ftphost = "ip_address"; // IP address of your hosting account 
$ftpmode = "passiveftp"; // FTP mode 

// Notification information $notifyemail = "any@example.com"; // Email address to send results 
// Secure or non-secure mode $secure = 0; // Set to 1 for SSL (requires SSL support), otherwise will use standard HTTP 
// Set to 1 to have web page result appear in your cron log $debug = 0;
// *********** NO CONFIGURATION ITEMS BELOW THIS LINE ********* 
$ftpport = "21"; 
$ftpdir = "/backups/"; // Directory where backups stored (make it in your /home/ directory). Or you can change 'backups' to the name of any other folder created for the backups; 

if ($secure) { 
  $url = "ssl://".$domain; 
  $port = 2083; 
} else { 
  $url = $domain; 
  $port = 2082; 
} 

$socket = fsockopen($url,$port);

if (!$socket) { echo "Failed to open socket connection... Bailing out!n"; exit; } 

// Encode authentication string 
$authstr = $cpuser.":".$cppass; 
$pass = base64_encode($authstr); 
$params = "dest=$ftpmode&email=$notifyemail&server=$ftphost&user=$ftpuser&pass=$ftppass&port=$ftpport&rdir=$ftpdir&submit=Generate Backup"; 

// Make POST to cPanel 
fputs($socket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0\r\n"); 
fputs($socket,"Host: $domain\r\n"); 
fputs($socket,"Authorization: Basic $pass\r\n"); 
fputs($socket,"Connection: Close\r\n"); 
fputs($socket,"\r\n"); 

// Grab response even if we do not do anything with it. 
while (!feof($socket)) { 
$response = fgets($socket,4096); if ($debug) echo $response; 
} 

fclose($socket); 

?>

To schedule the script to run regularly, save it as fullbackup.php in your home directory and enter a new cron job** like the following:

00 2 * * 1 /usr/local/bin/php /home/youraccount/fullbackup.php

(This will now run every Sunday night at 2:00 a.m.)

That’s it!

Transfer a File via PHP

| May 23rd, 2014

I had an issue come up where GoDaddy shared hosting didn’t allow outbound FTP connections for backups, etc..  Helping someone migrate away from GoDaddy, I didn’t want to download 2 GB of data and re-upload, so threw this quick script together to make it happen:

<?php
if(!@copy('http://source.com/thefile.bz2','./thefile.bz2'))
{
  $errors= error_get_last();
  echo "COPY ERROR: ".$errors['type'];
  echo "<br />\n".$errors['message'];
} else {
  echo "File copied from remote!";
}
?>

If you want to do it via FTP, then this works well for plain-text GoDaddy remote connections:

<?php
if(!@copy('ftp://UN:PW@SERVER/file/location/thefile.bz2','./thefile.bz2'))
{
  $errors= error_get_last();
  echo "COPY ERROR: ".$errors['type'];
  echo "<br />\n".$errors['message'];
} else {
  echo "File copied from remote!";
}
?>

 

Let’s say you want to transfer via FTP between two servers while on a 3rd server.

<?php
if(!@copy('ftp://UN:PW@SERVER-A/file/location/thefile.bz2','ftp://UN:PW@SERVER-B/file/location/thefile.bz2'))
{
  $errors= error_get_last();
  echo "COPY ERROR: ".$errors['type'];
  echo "<br />\n".$errors['message'];
} else {
  echo "File copied from remote!";
}
?>