#!/bin/bash # inspirated source http://www.cambus.net/creating-thumbnails-using-phantomjs-and-imagemagick/ for global idea # https://gist.github.com/rsvp/1171304 for httpstatus code # All info at http://forge.leslibres.org/projects/soshot site=$1 # url for thumbshot hashUrl=$2 # hash(url) is the name of final image thumbSize=$3 # size of thumb widthxheight ex : 190x90 sizeNameDir=$4 # name of size dir renderType=$5 # make only thumbshot / thumbshot + realSize / thumbshot + complete / thumbshot + complete + realSize waitForResult=$6 # if true we try to make soon as possible or add to queue noErrorLog=$7 ########################################## ##### DON'T EDIT THIS PARAM USE ##### ##### cache/config/serverOptions.php ##### ##### for overwrite options ##### ########################################## maxThread=1 # max parralle work. For me the best is nb core - 1 timeOut=120 # default time out, after this time the site are declared in error log=false # log all generation success and error randomSleep=`echo $((RANDOM%40))` optimizeTool='' # external tool form optimize png maxQueue=50 # max process in queue currentProcess=$(ps x | grep -v grep | grep thumb_server.sh | wc -l) firstLevel=${hashUrl:0:2} secondLevel=${hashUrl:2:2} startPath=$sizeNameDir/$firstLevel/$secondLevel/ getArch=$(getconf LONG_BIT) #echo $getArch if [ $currentProcess -gt $maxQueue ] then rm "../cache/tmp/$hashUrl.lock" exit fi if [ "$site" = "manual" ] then site=$(cat "../cache/tmp/manual.txt") echo '' > "../cache/tmp/manual.txt" fi mkdir -p "../cache/img/$startPath" if [ -f "../cache/config/serverOptions.php" ] then source "../cache/config/serverOptions.php" fi if [ ! $waitForResult ] then sleep $randomSleep while [[ `ps -e | grep -v grep | grep phantomjs | wc -l` -ge $maxThread ]] do sleep $randomSleep done fi start_time=`date +%s` if [ $getArch -eq 64 ] then timeout $timeOut nice -n 5 ./phantomjs_x64 --disk-cache=false --local-storage-path=../cache/tmp --ignore-ssl-errors=true --web-security=false rasterize.js "$site" "../cache/tmp/$hashUrl.png" exitStatus=$? else timeout $timeOut nice -n 5 ./phantomjs_x86 --disk-cache=false --local-storage-path=../cache/tmp --ignore-ssl-errors=true --web-security=false rasterize.js "$site" "../cache/tmp/$hashUrl.png" exitStatus=$? fi #echo $exitStatus if [ $exitStatus -eq 124 ] then echo 0 cp "000.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "000.png" "../cache/img/$startPath""$hashUrl.png" && cp "000.png" "../cache/img/$startPath""$hashUrl""_complete.png" rm "../cache/tmp/$hashUrl.lock" exit fi if [[ ! -f "../cache/tmp/$hashUrl.png" ]] then echo 0 errorCode=`echo $(curl -k -L --write-out %{http_code} --silent -S --connect-timeout $timeOut \--no-keepalive --output /dev/null $site)` if [ $site == 'manual' ] then errorCode='manual' fi #echo $errorCode case $errorCode in 000) cp "000.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "000.png" "../cache/img/$startPath""$hashUrl.png" && cp "000.png" "../cache/img/$startPath""$hashUrl""_complete.png";; 200) cp "error.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "error.png" "../cache/img/$startPath""$hashUrl.png" && cp "error.png" "../cache/img/$startPath""$hashUrl""_complete.png";; 404) cp "404.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "404.png" "../cache/img/$startPath""$hashUrl.png" && cp "404.png" "../cache/img/$startPath""$hashUrl""_complete.png";; manual) rm "../cache/tmp/$hashUrl.lock" && exit;; *) cp "error.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "error.png" "../cache/img/$startPath""$hashUrl.png" && cp "error.png" "../cache/img/$startPath""$hashUrl""_complete.png";; esac rm "../cache/tmp/$hashUrl.lock" if $log == true then end_time=`date +%s` logDate=`date +'[%a %d %b %Y] [%H:%M:%S]'` if [ $noErrorLog == "noErrorLog" ] then exit fi if [ $errorCode == 200 ] then echo "none --- "$site" --- "$hashUrl" --- "$thumbSize" --- "$sizeNameDir" --- "$onlyThumb" --- true --- "$errorCode > "../cache/logs/retry/"$hashUrl".log" else echo "none --- "$site" --- "$hashUrl" --- "$thumbSize" --- "$sizeNameDir" --- "$onlyThumb" --- true --- "$errorCode > "../cache/logs/other/"$hashUrl".log" fi fi exit fi case $renderType in # thumbnail only t) nice -n 5 convert "../cache/tmp/$hashUrl.png" -crop 1280x1024+0+0 -filter Lanczos -thumbnail "$thumbSize" "../cache/tmp/$hashUrl""_thumb.png" if [ $optimizeTool ] then eval nice -n 5 $optimizeTool "../cache/tmp/$hashUrl""_thumb.png" &>/dev/null fi mv "../cache/tmp/$hashUrl""_thumb.png" "../cache/img/$startPath""$hashUrl""_thumb.png" if [[ -f "../cache/img/$startPath""$hashUrl""_thumb.png" ]] then echo 1 else echo 0 fi rm "../cache/tmp/$hashUrl.png" rm "../cache/tmp/$hashUrl.lock" ;; # thumbnail + complete tc) nice -n 5 convert "../cache/tmp/$hashUrl.png" -crop 1280x1024+0+0 -filter Lanczos -thumbnail "$thumbSize" "../cache/tmp/$hashUrl""_thumb.png" if [ $optimizeTool ] then nice -n 5 eval $optimizeTool "../cache/tmp/$hashUrl""_thumb.png" "../cache/tmp/$hashUrl.png" &>/dev/null fi mv "../cache/tmp/$hashUrl.png" "../cache/img/$startPath""$hashUrl""_complete.png" mv "../cache/tmp/$hashUrl""_thumb.png" "../cache/img/$startPath""$hashUrl""_thumb.png" if [[ -f "../cache/img/$startPath""$hashUrl""_thumb.png" && -f "../cache/img/$startPath""$hashUrl""_complete.png" ]] then echo 1 else echo 0 fi rm "../cache/tmp/$hashUrl.lock" ;; # thumbnail + realsize tr) nice -n 5 convert "../cache/tmp/$hashUrl.png" -crop 1280x1024+0+0 "../cache/tmp/$hashUrl.png" nice -n 5 convert "../cache/tmp/$hashUrl.png" -filter Lanczos -thumbnail "$thumbSize" "../cache/tmp/$hashUrl""_thumb.png" if [ $optimizeTool ] then eval nice -n 5 $optimizeTool "../cache/tmp/$hashUrl""_thumb.png" "../cache/tmp/$hashUrl.png" &>/dev/null fi mv "../cache/tmp/$hashUrl.png" "../cache/img/$startPath""$hashUrl.png" mv "../cache/tmp/$hashUrl""_thumb.png" "../cache/img/$startPath""$hashUrl""_thumb.png" if [[ -f "../cache/img/$startPath""$hashUrl""_thumb.png" && -f "../cache/img/$startPath""$hashUrl.png" ]] then echo 1 else echo 0 fi rm "../cache/tmp/$hashUrl.lock" ;; # thumbnail + realsize + complete trc) cp "../cache/tmp/$hashUrl.png" "../cache/tmp/$hashUrl""_complete.png" nice -n 5 convert "../cache/tmp/$hashUrl.png" -crop 1280x1024+0+0 "../cache/tmp/$hashUrl.png" nice -n 5 convert "../cache/tmp/$hashUrl.png" -filter Lanczos -thumbnail "$thumbSize" "../cache/tmp/$hashUrl""_thumb.png" if [ $optimizeTool ] then eval nice -n 5 $optimizeTool "../cache/tmp/$hashUrl""_thumb.png" "../cache/tmp/$hashUrl.png" "../cache/tmp/$hashUrl""_complete.png" &>/dev/null fi mv "../cache/tmp/$hashUrl.png" "../cache/img/$startPath""$hashUrl.png" mv "../cache/tmp/$hashUrl""_thumb.png" "../cache/img/$startPath""$hashUrl""_thumb.png" mv "../cache/tmp/$hashUrl""_complete.png" "../cache/img/$startPath""$hashUrl""_complete.png" if [[ -f "../cache/img/$startPath""$hashUrl""_thumb.png" && -f "../cache/img/$startPath""$hashUrl.png" && -f "../cache/img/$startPath""$hashUrl""_complete.png" ]] then echo 1 else echo 0 fi rm "../cache/tmp/$hashUrl.lock" ;; esac if $log then end_time=`date +%s` logDate=`date +'[%a %d %b %Y] [%H:%M:%S]'` echo $logDate `expr $end_time - $start_time`s >> '../cache/logs/success.txt' fi