You are not logged in.

#1 2010-10-03 15:49:17

maz
Member
Registered: 2006-05-05
Posts: 38

[solved] time scheduling bashscript

Ive been working on a script that allows me to download streams from my dreambox since it doesnt have a hard drive in it.
Right now I have to start it when I need to download the stream and its getting annoying.

What I want is some sort of time-programming so that I can easily enter time and date and it will automaticly run the specific commands at that time, in this case download the stream. But since my knowledge of bash-scripting is very limited and I have no idea on how to even start I need help. I was thinking of crontab but I dont know how to implement it.

Current script, heavily stripped. Its crude but it works for me.

#!/bin/bash

showMenu () {
        echo ""
        echo "Ripper Menu"
        echo "1) SVT1"
        echo "2) TV4 Sport"
        echo ""
        echo "3) Quit"
        echo ""
}

while [ 1 ]
do
        showMenu
        read CHOICE
        case "$CHOICE" in
                "1")
                        echo "### Changing channel ###"
                        wget -q http://192.168.6.10:80/web/zap?sRef=1:0:1:449:2D:A027:FFFF0000:0:0:0:
                        wait
                        rm zap*
                        echo "### Downloading stream ###"
                        wait
                        wget -b http://192.168.6.10:8001/1:0:1:449:2D:A027:FFFF0000:0:0:0: -O svt1-`eval date +%Y-%m-%d_%H.%M.%S`.ts
                        ;;
                "2")
                        echo "### Changing channel ###"
                        wget -q http://192.168.6.10:80/web/zap?sRef=1:0:1:3F7:1E:A027:FFFF0000:0:0:0
                        wait
                        rm zap*
                        echo "### Downloading stream ###"
                        wait
                        wget -b http://192.168.6.10:8001/1:0:1:3F7:1E:A027:FFFF0000:0:0:0 -O tv4sport-`eval date +%Y-%m-%d_%H.%M.%S`.ts
                        ;;
                "3")
                        rm wget-log*
                        wait
                        killall wget
                        wait
                        exit
                        ;;
        esac
done

EDIT: basicly I want to start the script, press 1 and then enter the time and date and then enter and the commands will start when its time.

Last edited by maz (2010-10-05 19:39:14)

Offline

#2 2010-10-03 15:57:58

karol
Archivist
Registered: 2009-05-06
Posts: 25,440

Re: [solved] time scheduling bashscript

I would still suggest you have a look at http://wiki.archlinux.org/index.php/Cron
<when> <what> - <when> is the cron-formatted time, <what> is your script:

01 * * * *  /home/user/bin/i_love_cron.sh

Last edited by karol (2010-10-03 16:00:03)

Offline

#3 2010-10-03 16:03:03

maz
Member
Registered: 2006-05-05
Posts: 38

Re: [solved] time scheduling bashscript

karol wrote:

I would still suggest you have a look at http://wiki.archlinux.org/index.php/Cron
<when> <what> - <when> is the cron-formatted time, <what> is your script:

01 * * * *  /home/user/bin/i_love_cron.sh

Thanks for your reply but I know how cron works however I dont know how to implement it in my script, thats the question. Might have been vague in my OP smile

Offline

#4 2010-10-03 16:15:52

kfgz
Member
From: Supraśl, Poland
Registered: 2009-03-02
Posts: 114

Re: [solved] time scheduling bashscript

An example (tvrec)

#!/bin/sh
#channels=R12-Tvp1,R11-Tvp2,R7-Tvp3,SR6-Tv4,SR8-Tvn,SR3-Tvn7,SR16-Tvn_Turbo,R6-Polsat,SR14-Polsat_Sport_Extra,SR11-Discovery

_start_rec_year=2010
_start_rec_month=10
_start_rec_day=3
_start_rec_hour=2
_start_rec_minute=24

_stop_rec_year=2010
_stop_rec_month=10
_stop_rec_day=3
_stop_rec_hour=4
_stop_rec_minute=30

while [ true ]
do
 _curr_year=`date +%Y`
 _curr_month=`date +%-m`
 _curr_day=`date +%-d`
 _curr_hour=`date +%k`
 _curr_minute=`date +%-M`
 if [ ${_curr_year} -ge ${_start_rec_year} ]; then
    if [ ${_curr_month} -ge ${_start_rec_month} ]; then
        if [ ${_curr_day} -ge ${_start_rec_day} ]; then
            if [ ${_curr_hour} -ge ${_start_rec_hour} ]; then
                if [ ${_curr_minute} -ge ${_start_rec_minute} ]; then
                    dtach -n /tmp/tv_rec.dtach mencoder -tv driver=v4l2:width=768:height=576 -tv \
                    channels=R12-Tvp1 tv:// -o tv.avi -oac pcm -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=10000 &
                    echo "start rec"
                    break
                fi
            fi
        fi
    fi
 fi
 sleep 10
done

sleep 5
_kill=`ps aux | grep mencoder | grep -v grep | awk '{print $2}'`

while [ true ]
do
 _curr_year=`date +%Y`
 _curr_month=`date +%-m`
 _curr_day=`date +%-d`
 _curr_hour=`date +%k`
 _curr_minute=`date +%-M`
 if [ ${_curr_year} -ge ${_stop_rec_year} ]; then
    if [ ${_curr_month} -ge ${_stop_rec_month} ]; then
        if [ ${_curr_day} -ge ${_stop_rec_day} ]; then
            if [ ${_curr_hour} -ge ${_stop_rec_hour} ]; then
                if [ ${_curr_minute} -ge ${_stop_rec_minute} ]; then
                    kill ${_kill}
                    echo "stop rec"
                    break
                fi
            fi
        fi
    fi
 fi
 sleep 10
done

sync

You have to modify it to your needs.

Offline

#5 2010-10-03 16:16:52

maz
Member
Registered: 2006-05-05
Posts: 38

Re: [solved] time scheduling bashscript

Oh lovely. Ill get right on it when im not on my netbook, thank you!

Offline

#6 2010-10-03 16:26:10

Ashren
Member
From: Denmark
Registered: 2007-06-13
Posts: 1,229
Website

Re: [solved] time scheduling bashscript

The "at" command might be what you are looking for:

http://www.computerhope.com/unix/uat.htm

Something like using read (storing time as variable) + echo "command" | at -v <time variable> should be straightforward to integrate in to your script.

You need to run the atd daemon for at to work.

Offline

#7 2010-10-03 17:42:12

bernarcher
Forum Fellow
From: Germany
Registered: 2009-02-17
Posts: 2,281

Re: [solved] time scheduling bashscript

Ashren wrote:

The "at" command might be what you are looking for:

http://www.computerhope.com/unix/uat.htm

+ 1

I made some sort of a reminder wrapper script long ago which I use ever since. Although this is meant to be used interactively it schould be no big problem to adapt the the OP's needs.

#!/bin/bash
#
# Issue an alarm using at and xmessage
# Usage:
#     AL [@] delay [message timeout]]
#    where @ denotes absolute time
#    If not absolute time:
#       delay is in minutes
#       timeout is in seconds
#
# Defaults to 5 minutes delay: "ALARM"
# Message defaults to "ALARM"

PREFIX="now + "
SUFFIX=" minutes"
DELAY=15
MSG='ALARM'
TO=60

if [ "$1" == "-h" ] || [ "$1" == "--help" ]
then
  echo "AL - Issue an alarm"
  echo "     AL [delay (in minutes) [message [timeout (in seconds)]]]"
  echo "   or"
  echo "     AL @ time [message [timeout (in seconds)]]"
  echo "   defaults: delay=15 message=\"ALARM\" timeout=60"
  exit
fi

if [ "$1" == "@" ]
then
  PREFIX=""
  SUFFIX=""
  shift
fi

if [ "$1"x != "x" ]
then
  DELAY=$1
  if [ "$2"x != "x" ]
  then
    MSG="$2"
    if [ "$3"x != "x" ]
    then
      TO=$3
    fi
  fi
fi

# Xdialog Version
echo "BELL;DISPLAY=:0 Xdialog --timeout $TO --msgbox "\"$MSG\"" 0 0" | at $PREFIX$DELAY$SUFFIX

# xmessage version
# echo "BELL;DISPLAY=:0 xmessage -button OK -default OK -timeout $TO ""$MSG""" | at $PREFIX$DELAY$SUFFIX

if [ "$PREFIX"x != "x" ]
then
    echo "Alarm \""$MSG"\" in $PREFIX$DELAY$SUFFIX using timeout $TO seconds"
else
    echo "Alarm \""$MSG"\" at $DELAY using timeout $TO seconds"
fi

To know or not to know ...
... the questions remain forever.

Offline

#8 2010-10-03 23:50:33

maz
Member
Registered: 2006-05-05
Posts: 38

Re: [solved] time scheduling bashscript

Thnx for the 'at' tip. Been improving the script but Ive found it difficult to make sub menus. Any ideas/examples?

Offline

#9 2010-10-05 19:38:44

maz
Member
Registered: 2006-05-05
Posts: 38

Re: [solved] time scheduling bashscript

So after lots of trial n error I finally have a working script. Its a mess but it works!

#!/bin/bash

PS3='$ '
DATE=`date +%Y-%m-%d_%H.%M.%S`
IFS=";"

OPTIONS="SVT1;TV4 Sport;Quit"

select opt in $OPTIONS; do
    if [ "$opt" = "Quit" ]; then
     exit
    elif [ "$opt" = "SVT1" ]; then

     echo -n "Name (text_text): "
      read NAME

     echo -n "Start (YYMMDDHHmm): "
      read START

     echo -n "Stop (YYMMDDHHmm): "
      read STOP

     echo "wget -q --spider http://192.168.6.10:80/web/zap?sRef=1:0:1:449:2D:A027:FFFF0000:0:0:0:" | at -t $START
     echo "wget -o /dev/null -q -N -b http://192.168.6.10:8001/1:0:1:449:2D:A027:FFFF0000:0:0:0: -O $NAME.$DATE.ts" | at -t $START
     echo "killall wget" | at -t $STOP


    elif [ "$opt" = "TV4Sport" ]; then
     echo hi

    else
     echo moron!
    fi
done

Offline

Board footer

Powered by FluxBB