I needed a method to update a database application across a WAN, and found that I could do this with my Linux firewalls, and Windows batch scripting. The topology is this:
Win2k Svr -> Linux FW -> Internet <- Linux FW <- WinNT Svr Win2k Svr batch file:
rem @echo off
set filename=mydb.log
Net Stop "SQL Anywhere - mydb" >> "%filename%"
attrib -R "C:\Program Files\mydb Software\mydb\mydb.db"
attrib -R "C:\Program Files\mydb Software\mydb\mydb.log"
net use Z: \\win2ksvr\home\backup\backup\mydb admpass /USER:domain\admin
for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set d=%%k%%i%%j
for /F "tokens=1,2,3 delims=:. " %%i in ('time/t') do set t=%%i%%j%%k
xcopy "C:\Program Files\mydb Software\mydb\mydb.log" Z:
call :report %errorlevel% "C:\Program Files\mydb Software\mydb\mydb.log"
xcopy "C:\Program Files\mydb Software\mydb\mydb.db" Z:
call :report %errorlevel% "C:\Program Files\mydb Software\mydb\mydb.db"
net use Z: /delete
Net Start "SQL Anywhere - mydb" >> "%filename%"
goto :eof
:report
if %1==0 set status=OK
if not %1==0 set status=Failed
echo %2 %status% on %d% at %t% >> "%filename%"
set status=
goto :eof
:eof
end
Linux FW Script:
#!/bin/sh
# Source function library.
. /etc/init.d/functions
# Get config.
. /etc/sysconfig/network
# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
echo "Networking is not setup on this computer."
exit 0
fi
# Check that DSL is up.
host="ameritech.net"
ping -c1 $host 2>&1 1>/dev/null
if [ $? -gt 0 ]; then
echo "Can't ping ameritech.net. We must be down,\nor we are not resolving properly.\nPlease check it out" mail -s "We appear to be down." hostmaster@domain.org
exit 0
fi
## Check that Domain is up.
if ! wget -T 30 -O /dev/null -q http://www.domain.org/index.html; then
# Domain is down
echo "Domain is down, the first page of the \nwebsite is not available" mail -s "Domain is down." hostmaster@domain.org
exit 0
fi
## Zip up the db
cd /home/backup/rambackup/Mydb
if [ -e mydb.db -o -e mydb.log ]; then
zip -9 -m mydb.zip mydb.db mydb.log
cp mydb.zip /mnt/domain1
else
echo "There was no mydb.db or mydb.log file on /home/backup/rambackup/Mydb to zip up. Check and make sure they exist." mail -s "Mydb zipping error." hostmaster@domain.org
exit 0
fi
sftp -C -b /etc/cron.daily/mydb.batch -oUser=smbuser -oIdentityFile=/home/samba/.ssh/id_dsa domain 2> /tmp/mydb >> /tmp/mydb
mail -s "Mydb transfer results." hostmaster@domain.org < /tmp/mydb rm -f /tmp/mydb exit 0
mydb.batch
lcd /home/backup/rambackup/mydb
cd /mydb
put mydb.zip
exit
WinNT Script
rem @echo off
cd "c:\MyDB Update Scripts\"
set filename=update.log
setlocal
set OK=N
for /f "Tokens=*" %%a in ('net stop "SQL Anywhere - MyDB"^|find /i "stopped successfully"')
do (
set OK=Y
)
If "%OK%" EQU "N" (
@echo The MyDB server did not stop successfully. >> "%filename%"
) ELSE (
@echo The MyDB server stopped successfully. >> "%filename%"
)
endlocal
attrib -R "c:\Program Files\MyDB Software\MyDB Fundraising\MyDB.db"
attrib -R "c:\Program Files\MyDB Software\MyDB Fundraising\MyDB.log"
net use P: \\10.0.0.3\MyDB
for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set d=%%k%%i%%j
for /F "tokens=1,2,3 delims=:. " %%i in ('time/t') do set t=%%i%%j%%k
xcopy P:\MyDB.log "c:\Program Files\MyDB Software\MyDB Fundraising\"
call :report %errorlevel% P:\MyDB.log
xcopy P:\MyDB.db "c:\Program Files\MyDB Software\MyDB Fundraising\"
call :report %errorlevel% P:\MyDB.db
net use P: /delete
Net Start "SQL Anywhere - MyDB" >> "%filename%"
goto :eof
:report
if %1==0 set status=OK
if not %1==0 set status=Failed
echo %2 %status% on %d% at %t% >> "%filename%"
set status=
goto :eof

0 comments:
Post a Comment