kopia lustrzana https://github.com/hholzgra/ocitysmap
116 wiersze
3.3 KiB
Bash
Executable File
116 wiersze
3.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
BASE_PATH=${HOME}/maposmatic
|
|
|
|
# Name of the PostgreSQL database to connect to.
|
|
DB_NAME=maposmatic
|
|
|
|
LOG_FILE=${BASE_PATH}/planet-update.log
|
|
PID_FILE=${BASE_PATH}/planet-update.pid
|
|
|
|
# Path to the osm2pgsql utility and default import style.
|
|
OSM2PGSQL=${BASE_PATH}/osm2pgsql/osm2pgsql
|
|
OSM2PGSQL_STYLE=${BASE_PATH}/osm2pgsql/default.style
|
|
|
|
# Path to the osmosis utility.
|
|
OSMOSIS=${BASE_PATH}/osmosis/osmosis/bin/osmosis
|
|
|
|
# Osmosis working directory and state file locations.
|
|
OSMOSIS_WD=${BASE_PATH}/osmosis
|
|
OSMOSIS_STATE=${OSMOSIS_WD}/state.txt
|
|
OSMOSIS_CONFIG=${OSMOSIS_WD}/configuration.txt
|
|
|
|
CURRENT_OSC=${OSMOSIS_WD}/changes.$$.osc.gz
|
|
|
|
log()
|
|
{
|
|
echo "`date +"%Y-%m-%d %H:%M:%S"` - planet-update@$$ - $1" >> ${LOG_FILE}
|
|
}
|
|
|
|
error()
|
|
{
|
|
log "ERROR: $1"
|
|
|
|
log "Resetting state..."
|
|
rm -f ${PID_FILE} ${CURRENT_OSC}
|
|
cp -f ${OSMOSIS_WD}/last.state.txt ${OSMOSIS_STATE}
|
|
|
|
echo "ERROR: $1"
|
|
tail "${LOG_FILE}"
|
|
}
|
|
|
|
if [ -s "${PID_FILE}" ] ; then
|
|
# If the update process is running, check for how long it has been running
|
|
# and kill it if it has been more than one hour.
|
|
NOW=`date +%s`
|
|
START=`stat -c %Y "${PID_FILE}"`
|
|
DELTA=`expr $NOW - $START`
|
|
if [ $DELTA -lt 3600 ] ; then
|
|
# Exit silently
|
|
exit 0
|
|
fi
|
|
|
|
# Kill the osmosis and osm2pgsql process
|
|
log "Killing stalled osmosis and osm2pgsql processes before starting over..."
|
|
cp -f ${OSMOSIS_WD}/last.state.txt ${OSMOSIS_WD}/last.state.txt.$$
|
|
ps aux | grep "${OSMOSIS}" | grep -v grep | awk '{print $2}' | xargs kill -9 2>&1 > /dev/null
|
|
ps aux | grep "${OSM2PGSQL}" | grep -v grep | awk '{print $2}' | xargs kill -9 2>&1 > /dev/null
|
|
fi
|
|
|
|
if [ -e "${STOP_FILE}" ] ; then
|
|
echo "stop requested."
|
|
exit 1
|
|
fi
|
|
|
|
echo $$ > "${PID_FILE}"
|
|
log "log restarted."
|
|
|
|
if [ ! -s ${OSMOSIS_STATE} ] ; then
|
|
error "No state file! Can't continue!"
|
|
exit 2
|
|
fi
|
|
|
|
interval=`cat ${OSMOSIS_CONFIG} | \
|
|
grep -e '^maxInterval' | awk '{print $3}'`
|
|
rep=`cat ${OSMOSIS_STATE} |\
|
|
grep 'timestamp' |\
|
|
awk '{split($0, a, "="); print a[2]}' |\
|
|
tr 'T' ' ' |\
|
|
xargs -I{} date --utc --date "{}" +"%Y-%m-%d %H:%M:%S"`
|
|
|
|
log "Retreiving ${interval}s worth of updates starting at ${rep} UTC..."
|
|
cp -f ${OSMOSIS_STATE} ${OSMOSIS_WD}/last.state.txt
|
|
if ! ${OSMOSIS} --read-replication-interval workingDirectory=${OSMOSIS_WD} --simplify-change --write-xml-change ${CURRENT_OSC} 1>&2 2>> "${LOG_FILE}" ; then
|
|
error "Osmosis error. Aborting update!"
|
|
exit 2
|
|
fi
|
|
|
|
nodes=`zgrep '<node' ${CURRENT_OSC} | wc -l`
|
|
ways=`zgrep '<way' ${CURRENT_OSC} | wc -l`
|
|
rels=`zgrep '<rel' ${CURRENT_OSC} | wc -l`
|
|
|
|
log "Expecting Node("$((${nodes}/1000))"k) Way("$((${ways}/1000))"k) Relation("$((${rels}/1000))"k)"
|
|
|
|
log "Importing diff..."
|
|
if ! ${OSM2PGSQL} -a -s -S ${OSM2PGSQL_STYLE} -C 5000 --cache-strategy=sparse -d ${DB_NAME} -H localhost -U maposmatic ${CURRENT_OSC} 1>&2 2>> "${LOG_FILE}" ; then
|
|
error "Osm2pgsql error. Update failed!"
|
|
exit 3
|
|
fi
|
|
|
|
rep=`cat ${OSMOSIS_STATE} |\
|
|
grep 'timestamp' |\
|
|
awk '{split($0, a, "="); print a[2]}' |\
|
|
tr 'T' ' ' |\
|
|
xargs -I{} date --utc --date "{}" +"%Y-%m-%d %H:%M:%S"`
|
|
log "Update complete, database is now at ${rep} UTC."
|
|
|
|
# Update the maposmatic_admin table with the last update timestamp of
|
|
# the OSM data
|
|
log "Updating last_update time to ${rep} in information table..."
|
|
echo "UPDATE maposmatic_admin SET last_update='${rep}';" | psql -h localhost -U maposmatic -d ${DB_NAME} >> "${LOG_FILE}"
|
|
|
|
rm -f ${PID_FILE} ${CURRENT_OSC}
|
|
|
|
exit 0
|
|
|