#! /bin/bash
# check to see if site is up
# if it is, don't worry
# if it's down, restart apache after get a process listing
#
# v.1 Warren M Myers - initial stab
# 31 Aug 06
#
ERRCOD='7'
WHEN=`date +%d%b%y`
REPT="~/psaux.$WHEN.txt"
STARS='********************'
curl -I http://www.shodor.org > /var/tmp/curlret.txt
if [ "$?" = "$ERRCOD" ]; then
# return was unable to connect to host: save ps -aux; mail report
ps -aux > $REPT
echo $STARS
echo 'curl return results'
echo
cat curlret.txt
echo
echo $STARS
echo 'ps -aux results'
cat $REPT
echo
echo $STARS
echo 'restarting apache'
/etc/init.d/apache2 restart
echo 'apache restarted'
echo
echo "ps -aux results saved in $REPT"
fi
rm -f /var/tmp/curlret.txt
一个脚本,每小时运行,重新培训我的垃圾邮件过滤器基于两个 IMAP 文件夹,其中 span 和 ham 被放置。
#!/bin/sh
FNDIR="train-as-spam"
FPDIR="train-as-ham"
for dir in /home/*/.maildir
do
cd "${dir}"
USER=`stat -c %U .`
SRCDIR="${dir}/.${FNDIR}"
if [ ! -d ${SRCDIR} ]; then
echo no "${SRCDIR}" directory
else
cd "${SRCDIR}/cur"
ls -tr | while read file
do
if grep -q "^X-DSPAM" "${file}"; then
SOURCE="error"
else
SOURCE="corpus"
fi
dspam --user "${USER}" --class=spam --source="${SOURCE}" --deliver=innocent,spam --stdout < "${file}" > "../tmp/${file}"
mv "../tmp/${file}" "${dir}/new/${file%%:*}" && rm "${file}"
done
fi
SRCDIR="${dir}/.${FPDIR}"
if [ ! -d ${SRCDIR} ]; then
echo no "${SRCDIR}" directory
else
cd "${SRCDIR}/cur"
ls -tr | while read file
do
if grep -q "^X-DSPAM" "${file}"; then
SOURCE="error"
else
SOURCE="corpus"
fi
dspam --user "${USER}" --class=innocent --source="${SOURCE}" --deliver=innocent,spam --stdout < "${file}" > "../tmp/${file}"
mv "../tmp/${file}" "${dir}/new/${file%%:*}" && rm "${file}"
done
fi
done
MySQL 备份。我做了一个 Windows 批处理脚本,它可以创建 MySQL 数据库的增量备份,每天创建一个新的转储,并在远程服务器上每10分钟备份一次。它救了我无数次的命,尤其是在无数次客户打电话来,大声嚷嚷说数据库里的记录“消失了”的情况下。我选择了“没问题,让我们看看发生了什么”,因为我还编写了一个二进制搜索脚本,它将查找数据库中记录出现的最后时刻。从那里就很容易理解是谁“偷”了它,以及为什么。
你无法想象这些有多么有用,我已经使用它们将近5年了。我不会转换到其他任何东西,因为他们已经粗略测试,他们是定制的,这意味着他们正是我需要什么,没有更多的,但我已经调整了他们如此之多,这将是一个快速增加额外的功能。
因此,我的“杰作”是一个 MySQL 增量备份 + 远程备份 + Windows 日志搜索系统。我也写了一个 Linux 版本,但是我把它弄丢了,可能是因为它只有大约15行 + 一个 cron 作业,而不是 Windows 的大约1200行 + 两个计划任务。
============trim.pl===========
#!/usr/bin/perl
#It seems that my cygwin box doesn't have HOSTNAME available in the
#environment - at least not to scripts - so I'm getting it elsewhere.
open (IN, "/usr/bin/hostname|");
$hostname = <IN>;
close (IN);
$hostname =~ /^([A-Za-z0-9-]*)/;
$host_short = $1;
$preamble = "..." if (length($ENV{"PWD"})>37);
$ENV{"PWD"} =~ /(.{1,37}$)/;
$path_short = $1;
print "$host_short: $preamble$path_short";
==============================
一个名为 起来的 bash 脚本,这样如果我在 /a/very/deeply/nested/path/somewhere中并且我想要“向上”到 N目录,我可以键入 up N:
#!/bin/bash
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
P=$P/..
done
cd $P
例如:
/a/very/deeply/nested/path/somewhere> up 4
/a/very>
注意:
通过完成上述伟大的工作,它可以扩展到后面的功能,将以下内容放入您的 bashrc:
function up( )
{
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
P=$P/..
done
cd $P
export MPWD=$P
}
function back( )
{
LIMIT=$1
P=$MPWD
for ((i=1; i <= LIMIT; i++))
do
P=${P%/..}
done
cd $P
export MPWD=$P
}
运行 WinXP 和我似乎从来没有时间开始碎片整理并等待它完成。因此,我编写了自己的脚本来启动 XP 内置的 defrag.exe,并将其安排为夜间运行。结果保存在 C: Temp 中的日志文件中,以便以后查看。
@echo off
GOTO :MAIN
###########################################################
#
# Reason:
# This script runs the defrag utility.
#
# Suggestion:
# Schedule this script to run daily (via schtasks)
#
# Example:
# SCHTASKS /Create /SC DAILY /ST 03:00:00
# /TR \"C:\path\to\DAILY_DEFRAG.BAT" /TN "Daily Defrag of C Drive\"
#
# Example:
# AT 03:00 /every:Su,M,T,W,Th,F,Sa C:\path\to\DAILY_DEFRAG.BAT
#
# Required OS:
# Windows XP or Windows Server 2003
#
# Required files:
# DEFRAG.EXE
#
#
###########################################################
:MAIN
:: Output a listing of scheduled tasks
SCHTASKS /QUERY /V > C:\temp\schtasks.out
:: *****************************************************
:: * SITE SPECIFIC Program Parameters *
:: *****************************************************
:: * Drive to defrag
SET TARGET=C:
:: * Log file
SET LOGFILE=C:\temp\defrag.log
:: *****************************************************
:: * No editable parameters below this line *
:: *****************************************************
SETLOCAL
:: Announce intentions
echo.
echo Beginning defragmentation of disk %TARGET%
echo ----------------------------------------------
echo.
for /f "tokens=1 delims=_" %%a in ('date /t') do set NOW=%%a
for /f "tokens=1 delims=_" %%a in ('time /t') do set NOW=%NOW% %%a
echo Start time: %NOW%
:: Run the defrag utility
C:\WINNT\SYSTEM32\defrag.exe %TARGET% -f -v > %LOGFILE%
echo.
for /f "tokens=1 delims=_" %%a in ('date /t') do set NOW=%%a
for /f "tokens=1 delims=_" %%a in ('time /t') do set NOW=%NOW% %%a
echo End time: %NOW%
echo.
echo ----------------------------------------------
echo Defrag complete.
echo.
:END
alias nosvn="grep -v \"\.svn\|tags\|cscope\|Binary\""
alias less="less -R"
alias diff="colordiff -u"
alias cgrep="grep --color=always"
export GREP_OPTIONS='--color=auto'
我写了一个脚本,结果在我的团队中每天都在使用。当我曾经为英特尔工作时,我们有一个应用程序,它可以与访问数据库交谈,获取寄存器信息的转储(我致力于验证芯片组)。它将获取这些信息(来自 SQL 查询)并将其转储到 CSV 文件、 HTML 文件和 Excel 文件中。整个过程花了将近2个小时。没开玩笑。不知道为什么花了这么长时间。我们会在午饭前一小时开始,去吃午饭,然后再回来。
我觉得应该有更好的办法。我和维护注册表数据库的团队谈过,并从他们那里得到了 SQL 代码。然后,我编写了一个 perl 脚本,抓取数据并将其输出为 CSV、 HTML 和 Excel 格式。运行时间?大概1-2秒。速度大大提高。
2006年我在伊拉克服役期间也写了一些剧本(我在国民警卫队服役了9年——12月份退役)。我们使用这个旧的应用程序称为 ULLS-G (单位级物流系统-地面) ,是写在 ADA 和最初运行在 DOS。他们黑了它足够多的地方,它会运行在 Windows XP 在一个命令外壳程序。这个系统没有鼠标界面。一切都是通过键盘,它没有批处理功能。假设你想打印所有车辆运营商的执照?我们部队有150名士兵,所以花了很长时间。假设每个人都有资格驾驶一辆新车你想把它加入到每个人的驾驶资格中?你得一个一个来。