1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
#!/bin/bash # squid This shell script takes care of starting and stopping # Squid Internet Object Cache # # chkconfig: - 90 25 # description: Squid - Internet Object Cache. Internet object caching is \ # a way to store requested Internet objects (i.e., data available \ # via the HTTP, FTP, and gopher protocols) on a system closer to the \ # requesting site than to the source. Web browsers can then use the \ # local Squid cache as a proxy HTTP server, reducing access time as \ # well as bandwidth consumption. # pidfile: /var/run/squid.pid # config: /etc/squid/squid.conf PATH=/usr/bin:/sbin:/bin:/usr/sbin export PATH # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # check if the squid conf file is present [ -f /usr/local/squid/etc/squid.conf ] || exit 0 # determine the name of the squid binary [ -f /usr/local/squid/sbin/squid ] && SQUID=squid [ -z "$SQUID" ] && exit 0 prog="$SQUID" # determine which one is the cache_swap directory CACHE_SWAP=`sed -e 's/#.*//g' /usr/local/squid/etc/squid.conf | \ grep cache_dir | awk '{ print $3 }'` [ -z "$CACHE_SWAP" ] && CACHE_SWAP=/usr/local/squid/var/cache RETVAL=0 start() { for adir in $CACHE_SWAP; do if [ ! -d $adir/00 ]; then echo -n "init_cache_dir $adir... " /usr/local/squid/sbin/squid -z -F 2>/dev/null fi done echo -n $"Starting $SQUID $prog: " /usr/local/squid/sbin/squid $SQUID_OPTS 2> /dev/null & RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID [ $RETVAL -eq 0 ] && echo_success [ $RETVAL -ne 0 ] && echo_failure echo return $RETVAL } stop() { echo -n $"Stopping $prog: " /usr/local/squid/sbin/squid -k check >/dev/null 2>&1 RETVAL=$? if [ $RETVAL -eq 0 ] ; then /usr/local/squid/sbin/squid -k shutdown & rm -f /var/lock/subsys/$SQUID timeout=0 while : ; do [ -f /usr/local/squid/var/logs/squid.pid ] || break sleep 2 && echo -n "." timeout=$((timeout+2)) done echo_success echo else echo_failure echo fi return $RETVAL } reload() { /usr/local/squid/sbin/squid $SQUID_OPTS -k reconfigure } restart() { stop start } condrestart() { [ -e /var/lock/subsys/squid ] && restart || : } rhstatus() { status $SQUID /usr/local/squid/sbin/squid -k check } probe() { return 0 } case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; condrestart) condrestart ;; status) rhstatus ;; probe) exit 0 ;; *) echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}" exit 1 esac exit $? |
Route Table Testing
Use this command:
1 |
> ip route get <i>{dest ip}</i> |
To test from a specific source use:
1 |
> ip route get <i>{dest ip}</i> from <i>{src ip}</i> |
Advanced Networking Resources
http://linux-ip.net – Great online book about advanced networking issues.
http://lartc.org/ – Howto and man pages
Performance Monitoring
Here are some handy commands that I used recently to debug a server performance issue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<strong>> sar</strong> Linux 2.4.9-34smp (some.server.net) 07/28/2004 12:00:00 AM CPU %user %nice %system %idle 12:10:00 AM all 12.29 2.00 4.55 81.16 12:20:00 AM all 4.14 0.16 2.58 93.13 12:30:00 AM all 4.46 0.02 2.79 92.74 12:40:01 AM all 3.68 0.04 2.36 93.92 12:50:00 AM all 3.78 0.03 2.47 93.72 01:00:00 AM all 3.89 0.10 2.42 93.59 01:10:00 AM all 6.65 0.62 2.70 90.03 01:20:00 AM all 5.56 0.31 2.85 91.27 01:30:00 AM all 4.04 0.02 2.40 93.53 01:40:00 AM all 4.41 0.58 2.92 92.09 01:50:01 AM all 5.63 0.73 3.13 90.51 02:00:00 AM all 3.58 0.03 2.19 94.19 02:10:00 AM all 8.19 0.03 2.39 89.39 02:20:00 AM all 4.84 0.00 2.90 92.25 02:30:00 AM all 6.77 0.59 2.86 89.78 02:40:01 AM all 4.04 0.02 2.99 92.94 02:50:00 AM all 4.60 0.03 2.83 92.55 03:00:00 AM all 5.67 0.29 2.83 91.21 03:10:00 AM all 4.58 0.13 2.99 92.29 03:20:00 AM all 8.69 0.80 3.46 87.05 03:30:01 AM all 5.32 0.22 3.10 91.36 03:40:01 AM all 4.85 0.06 3.23 91.85 03:50:00 AM all 3.73 0.00 2.72 93.55 04:00:00 AM all 3.40 0.02 2.27 94.31 04:10:00 AM all 40.16 0.09 8.79 50.96 04:20:00 AM all 44.44 0.04 10.07 45.45 04:30:00 AM all 32.32 1.06 10.09 56.53 04:40:00 AM all 38.10 0.04 7.05 54.81 04:50:01 AM all 32.80 0.02 8.07 59.12 05:00:02 AM all 32.89 2.06 13.31 51.74 05:10:00 AM all 42.18 0.49 9.52 47.81 05:20:01 AM all 53.17 2.62 9.76 34.44 05:30:00 AM all 18.56 6.41 16.87 58.15 05:40:00 AM all 38.36 0.04 9.80 51.80 05:50:00 AM all 26.03 0.24 9.35 64.38 06:00:00 AM all 30.65 0.97 9.82 58.56 06:10:01 AM all 44.41 0.07 9.51 46.00 06:20:00 AM all 25.11 0.14 12.42 62.34 06:30:00 AM all 37.65 0.02 12.12 50.21 Average: all 17.02 0.54 5.76 76.68 |
Also “sar -A” give more useful info.
For sar to work, you need a cronjob like this:
1 2 |
# run system activity accounting tool every 10 minutes */10 * * * * root /usr/lib/sa/sa1 1 1 |
The cronjob can go in a file at /etc/cron.d/sysstat on Redhat and similar systems.
Another useful command is “vmstat”:
1 2 3 4 5 6 7 |
<strong>> vmstat 1</strong> procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 0 5 0 44856 3040 50504 273364 1 2 78 107 53 129 20 6 74 1 5 0 44856 3164 50552 274176 0 0 2288 1036 513 766 21 11 68 1 4 0 44856 3056 50556 273496 0 0 3128 116 443 507 7 6 87 2 3 0 44856 3236 50564 274800 0 0 3200 460 557 558 8 7 85 |
Preferences vs. Command Line Options
Here’s my question answered by the author of DSpam – Jonathan Zdziarski:
1 2 3 4 5 |
> When calling dpsam, what takes precedence - user preferences or command line > options? User preferences; if you don't want your users to be able to override certain ones, you'll need to remove them from the prefs page. |