Monday, November 11, 2013

Bzip2 PGDump

To backup:
pg_dump -hlocalhost -Upostgres -a -t table database|bzip2 > tabledata.bz2

To restore:
bzip2 -c -d tabledata.bz2 | psql -hlocalhost -Upostgres database


Wednesday, October 16, 2013

AB Testing parameters

ab -e out.csv -k -n 5000 -c 100

-e = write to csv file
-k = enable http keepalive
-n = total number of requests to make
-c = number of concurrent requests
-i = do HEAD requests instead of GET
-A  auth-username:password 

Benchmarking (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests

Server Software:        nginx/1.1.19
Server Hostname:
Server Port:            80

Document Path:          /
Document Length:        185 bytes

Concurrency Level:      100
Time taken for tests:   8.359 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Non-2xx responses:      5003
Keep-Alive requests:    5000
Total transferred:      1951170 bytes
HTML transferred:       925555 bytes
Requests per second:    598.19 [#/sec] (mean)
Time per request:       167.172 [ms] (mean)
Time per request:       1.672 [ms] (mean, across all concurrent requests)
Transfer rate:          227.96 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    4  31.1      0     228
Processing:    38  158 239.9     96    3477
Waiting:       38  158 239.9     96    3477
Total:         38  163 253.6     96    3477

Percentage of the requests served within a certain time (ms)
  50%     96
  66%    120
  75%    145
  80%    159
  90%    237
  95%    434
  98%    951
  99%   1339
 100%   3477 (longest request)

Tuesday, July 16, 2013

Python Crontab Simple usage

pip install python-dateutil python-crontab

from crontab import CronTab
user_cron = CronTab('myuser')
command = "/usr/bin/ls -la"
comment = "Run"
job =, comment=comment)

Redhat/Debian Update Support

Preventing Kernel Updates in Linux


List Available updates in Linux
aptitude search '?upgradable'

sudo yum list updates

Automatic Security Updates

Download only packages without installing
yum install -y yum-downloadonly
yum install httpd -y --downloadonly --downloaddir=/my/download/dir/

apt-get -d, --download-only ...

Screenshots from Python and Phantomjs

Copied from Pykler's Stackoverflow answer:

  1. Install NodeJS
  2. npm -g install phantomjs
  3. pip install selenium 
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_window_size(1024, 768) # optional
driver.save_screenshot('screen.png') # save a screenshot to disk
sbtn = driver.find_element_by_css_selector('button.gbqfba')

Friday, May 17, 2013

Supervisord Common Commands

Invoke the supervisor shell:
sudo supervisorctl

# all of the following commands can be run within the supervisor shell or from the UNIX CLI

View processes managed by supervisord:
sudo supervisorctl status

Start/Stop/Restart processes from the UNIX command line:
sudo supervisorctl start processname
sudo supervisorctl stop processname
sudo supervisorctl restart processname

View standard error:
supervisorctl tail -f  processname stderr

Load changes to configuration without restarting unaffected processes:
supervisorctl reread  # reads the configuration changes
supervisorctl update  # restarts changed process groups

Reload supervisor processes and configurations, but doesn't restart supervisor itself:
supervisorctl reload


Wednesday, May 15, 2013

Postgres Configuration on RedHat

This will install Postgresql on a RedHat 6.4 or CentOS 6.4 system and will allow password-protected remote login access. 

# Open the firewall to allow remote postgres connections
sudo /sbin/iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

sudo /sbin/service iptables save
sudo /sbin/service iptables restart

# Install packages through yum
sudo yum install vim-enhanced
sudo yum install postgresql-server

# Initialize a new database directory
sudo service postgresql initdb 

# Start the database server
sudo service postgresql start 

# Add postgres to the default runlevel 
sudo chkconfig postgresql on
sudo chkconfig postgresql --list
sudo chmod 755 /home/idcuser/

# Edit the postgres.conf to allow connections from all ips
sudo vim /var/lib/pgsql/data/postgres.conf

# Edit the pg_hba.conf file to allow password auth for any ip
sudo vim /var/lib/pgsql/data/pg_hba.conf
host all all md5

# Restart postgres
sudo /etc/init.d/postgres restart

# Configure a postgresql superuser and new schema. 
sudo -u postgres psql
psql> create role idcuser superuser createdb createrole inherit login;
psql> alter user idcuser with password 'password';
psql> create database sample;
psql> \c sample
psql> create schema sample;
psql> alter user idcuser set search_path to sample,public;

Change Keybindings for Emacs-like Editing

Move left-ctrl to left-alt

Contents of .Xmodmap

clear Mod1
clear Control 
clear Mod2 

keycode 64 = Control_L Control_L Control_L Control_L 
keycode 37 = Alt_L Alt_L Alt_L Alt_L 
keycode 108 = Alt_R Alt_R Alt_R Alt_R 
keycode 127 = Num_Lock 

add Mod1 = Alt_L Alt_R 
add Control = Control_L Control_R 
add Mod2 = Num_Lock

Make effective without loging in
xmodmap ~/.Xmodmap

Save current keybindings
xmodmap -pke > ~/.Xmodmap-original

Dustin Lacewell

Monday, April 15, 2013


Listing Rules
# Rules are evaluated from top to bottom
# list the iptable rules
iptables -list
iptables -L

# list the rules with high verbosity 
iptables -L -v

# list the rules with high verbosity and line numbers
iptables -L -v --line-numbers

# list the rules with high verbosity and line numbers and show the raw IP addresses and ports
iptables -L -v --line-numbers -n

# list rules as a list of rules in the conf file.
iptables -S

Adding/Editing/Removing Rules 
# -I Option: Insert a rule at a specific point (to be the 4th rule). 
iptables -I INPUT 4 -p tcp  --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

# -A Option: Append a rule to the end of the rule list
iptables -A INPUT -p tcp  --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

# -D Option: Delete the INPUT rule at line 4
iptables -D INPUT 4

# -R Option: Replace a rule at 4th line
iptables -R INPUT 4 -p tcp  --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

Change the iptables policy

# Change the policy to drop all traffic if no rules matched.  
# Important: You'll want to setup an ssh rule before doing this
iptables -P INPUT DROP

# Change the policy to accept all traffic unless specific rules are matched
iptables -P INPUT ACCEPT

IPTables modules

# Modules are loaded using the -m flag
# Some common examples include: "-m tcp", "-m mac", and "-m state"
# Many are loaded by default. For example, if you specify "-p tcp --dport 22", I think it automatically loads the tcp module and assumes "-m tcp".

# List Loaded IPTables modules
cat /proc/net/ip_tables_matches

Jump option parameters (-j option) "jump to the specified target"
  ACCEPT - Accept the packet and stop processing rules
  REJECT - reject the packet and notify sender
  DROP - silently drop the packet and stop processing rules
  LOG - log the packet and continue processing

State option parameters (--cstate and --state options) 
   NEW - new connection that has not been seen
   RELATED - new connection but related to another connection
   ESTABLISHED - connection is already established
   INVALID - traffic couldn't be identified

Save the firewall rules on a RedHat system
/sbin/service iptables save

Clear rule statistics counters
iptables -Z

# good howto for Ubuntu

# A good howto for Centos and DROP policy

Wednesday, April 10, 2013

Ping with Timestamp

Ping an IP and print the time:
ping | perl -nle 'print scalar(localtime), " ", $_'

Monday, March 25, 2013

Synergy Linux Setup

sudo aptitude install synergy

Given the following computers:
computerA  (Synergy server)
computerB  (Synergy client)

And given: 
computerA is the name returned by the 'hostname' command on the server; ip is
computerB is an alias (setup in synergy.conf) to

Edit /etc/synergy.conf on the Synergy Server
section: screens

# we might not want to go through the effort of setting up DNS for computerB, so we can alias here instead.
section: aliases

section: links
       right = computerB
       left = computerA

On the server, run the following: 
 synergys -f --config /etc/synergy.conf

On the client, run the following: 
synergyc -f

launchctl / launchd on OSX

Launch definitions are in the form of plist documents

List jobs managed by launchctl (shows job label)
launchctl list

Show detail information about launchctl managed job
launchctl list job_label
i.e. launchctl list homebrew.mxcl.postgresql
# output will look like:
"Label" = "homebrew.mxcl.postgresql";
"LimitLoadToSessionType" = "Aqua";
"OnDemand" = false;
"LastExitStatus" = 0;
"PID" = 17312;
"TimeOut" = 30;
"StandardErrorPath" = "/usr/local/var/log/postgres/stderror.log";
"ProgramArguments" = (


Stop a job managed by launchctl
launchctl stop job_label

Good tool for making launchctl plists

Plists located in one of the following places
 ~/Library/LaunchAgents -  Per-user agents provided by the user. 
 /Library/LaunchAgents   -  Per-user agents provided by the administrator. 
 /Library/LaunchDaemons  -  System-wide daemons provided by the administrator. /System/Library/LaunchAgents -  Per-user agents provided by OS X.
 /System/Library/LaunchDaemons -  System-wide daemons provided by OS X.

Wednesday, February 27, 2013

DB2 command reference

Invoke interpreter:
shell> db2

List available databases:
db2_shell> list database directory

List DB2 shell history:
db2_shell> history
# or
db2_shell> h

Edit and Execute command from DB2 shell history:
# command_num is from the above history command
db2_shell> edit command_num
# or
db2_shell> e command_num

Connect to database from within the db2 interpreter (CLP):
db2_shell> connect to databasename

Connect to database from UNIX shell:
# lasts for duration of current shell session.
db2 connect to database_name

Run SQL command from UNIX shell:
# first connect to database via UNIX shell (above)
# then run the following
db2 -vf scriptname.sql

List tables in database:
db2_shell> list tables

List indexes on a table:
SELECT indschema,INDNAME from syscat.indexes where tabname = 'MYTABLE' and tabschema = 'MYSCHEMA'

Analyze table:
runstats on table schema.tablename

List connections to database:
unix> db2 list applications
# or
db2_shell> list applications
# for detail information
unix> db2 list applications show detail

Get current user:

Disconnect all connections:
force applications all
db2 terminate # this might work

Drop database:
drop database databasename

Create database:
create database databasename

Create the explain tables:
connect to databasename
db2 -vtf /opt/ibm/db2/V9.7/misc/EXPLAIN.DDL

Stop DB2:

Start DB2: 

Allow TCP connections (probably unsafe):
update database manager configuration using svcename 3700
get database manager configuration    # verify change
db2set DB2COMM=tcpip
sudo /sbin/iptables -A INPUT -p tcp --dport 7300 -j ACCEPT
sudo /sbin/service iptables save
sudo /sbin/service iptables restart

Update config params:
update db cfg for database_name using logfilsiz 8000
 # or
update database configuration for database_name using logprimary 9 logfilsiz 8000
force applications all


Thursday, February 14, 2013

NewRelic quick Django setup

pip install newrelic
newrelic-admin generate-config LICENSE-KEY newrelic.ini
# add your key to generated config

NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program python run_gunicorn


NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program python runserver

Monday, February 11, 2013

Postgres Access

In pg_hba.conf, set the following: 

To allow all remote users to log into a postgres database:

In pg_hba.conf, set the following: 
# remote hosts    Database    User      From any IP       Using PG md5 auth
host                      all                 all            md5

In the postgres.conf, set the following:
listen_addresses = '*'

To allow local UNIX users with the same name as PG users to auth automatically:
local                     all                 all           trust

Friday, February 08, 2013


Login to Redis:

Login to Remote Redis:
redis-cli -h
auth mypassword

Switch database:
select 1  # where one is the database name

List keys in database:
redis> keys *

Persist everything to disk right away:

Get the location of the redis data dump dir:
config get dir
1) "dir"
2) "/var/lib/redis/"

Backup the Redis database datafile:
cp /var/lib/redis/dump.rdb /my/backup/location/

Drop all data in db: