regulating the time a process can run with crontab?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 6 Jan 2002, James R. Van Zandt wrote:

> You will at least have to put your recording command in parentheses

The parentheses are not necessary, when only one pipeline is
involved.  You would only need this to enclose a set of command
lines.

> (so it runs as a subprocess) and follow it with an ampersand (so it

Yes, the ampersand was missing, and necessary, to backgound the
process; "$!" is only meaningful after that.

> runs in the background, and control returns to the parent process
> immediately).  So, I would write it this way:
> 
> #!/bin/sh
> (lynx --source `cat /tmp/streamurl` >path_to_file.mp3)&
> PROC=$!

The "at" command syntax requires the commands to be taken from a
file, or fed via the standard input, like my example with the
"here" document, or, to correct the line above: 

echo "kill $PROC" | at $END
 
> However, I have not tested this.  In particular, I'm not sure the at
> job will inherit the environment so that $end is defined.

Yes, it does inherit the environment (with a couple of minor
exceptions like TERM -- see the man page).  So the "`cat
/tmp/streamurl`" and temp file could be eliminated, and the URL
could simply be passed by an environmental variable (make sure
you export all the variables "at" will need, though, in the
starting script):

export STREAMURL

Can you really capture streaming audio with the -source option to
lynx?  I've never tried this, but it would really solve some
problems for me: what format would the result be in?  Would I
need to pipe it through sox?

See the script corrections below, too, for your original example.
 
> >From: Brent Harding <bharding@doorpi.net>
> >Date: Sat, 05 Jan 2002 21:55:28 -0600

> >Cool, that's what using at was for. I never knew how to get the process of
> >a script in to a variable with $!, better than using killall. Is there any
> >way, to for say,
> >Read a time as the prompt for some script which is in a variable, use it to
> >schedule up an at job for start and end this way?

> >For example:
#!/bin/sh
echo "Script to record broadcast or webcast material"

echo -e "Enter the time to start recording (default is now): \c"
read START
# Do not remove the next line -- not just a comment:
: set default start time, for testing -- ${START:=now}, if not set already.

echo -e "Enter the time to stop recording: (default is one hour): \c"
read END
# : set default stop time, for testing: ${END:=now+5minutes}if not set already
: set default stop time: ${END:=now+1hour}if not set already

echo -e "Enter the stream url to be recorded: \c"
read STREAMURL 
export STREAMURL END

read OUT_FILE\?"Enter the output filename with no suffix
 (suffix will be added -- default is captured_broadcast): "
: set default filename to ${OUT_FILE:=captured_broadcast} if not already set.

# old wrong: # at $START /usr/local/bin/record
at "$START" << End_of_here_document_marker
   # /usr/local/bin/record & # replaced:
   # Does the next line mean that the stream must be in mp3
   # format?  Will it work?
   lynx --source "$STREAMURL" > ${OUT_FILE}.mp3 &
   export PROC=$!
   # And we need another "at" command within the "at" command:
   at "$END" << End_Of_File_Mark
      # Prevent loss of recording with move command:
      kill $PROC && mv --backup --version-control=numbered \
         ${OUT_FILE}.mp3 ${OUT_FILE}.saved.mp3 
End_Of_File_Mark

   # exit "at" script at marker:
   # Marker string specified above for "here document" must start
   # at beginning of line (next line):
End_of_here_document_marker

exit

# Broken record script eliminated:
> >Then in /usr/local/bin/record
> >#!/bin/sh
> >lynx --source `cat /tmp/streamurl` >path_to_file.mp3
> >PROC=$!
> >at $end kill $PROC
> >One would probably use a date command to insure the file name won't
> >overwrite the last episode if it's not gone yet, and clean up the temp file
> >created. The only real problem with it is that if someone put in (halt) in
> >as a time, your system would go down if this is run by root. No error

Never run a script with external input as root!  Security hazard!
But "at" would not accept halt as a valid time: you would just
get an email from "at" telling you that you made a time format
error, and no recording would be made.  "at" scripts are run as
the user that invoked them, not root.  And halt wouldn't work
anyway, even if it was in the "here document", unless you ran it
as root, and used the root path.

LCR

The remaining lines are just quotation from the discussion thread:

> >checking at all in this, not sure if time is a possible test to make sure a
> >valid time of day is used.
> >At 04:55 PM 1/5/02 -0700, you wrote:
> >>And you might find that the "at" command is better choice
> >>for timing than "sleep" or cron.  For example:
> >>
> >>mpg123 lecture.mp3 &
> >>SOUNDPROC=$!
> >>
> >>at now+2hours << End_of_here_document
> >># Or: 
> >># at 9:30pm << End_of_here_document
> >>kill $SOUNDPROC
> >>End_of_here_document
> >>
> >>On Fri, 4 Jan 2002, James R. Van Zandt wrote:
> >>
> >>> One way to limit the duration of a command is to run it in a
> >>> subprocess (i.e. put the shell command in parentheses) and have the
> >>> parent kill it.  Here's an example:
> >>> 
> >>>   #!/bin/bash
> >>>   # try to send a string to the synthesizer via four different serial
> >>>   #ports
> >>>   for x in 0 1 2 3; do
> >>>       (DTK_PORT=/dev/ttyS$x
> >>>       echo "trying $DTK_PORT"
> >>>       stty sane 9600 raw -echo crtscts <$DTK_PORT &&\
> >>>       stty -echo                       <$DTK_PORT &&\
> >>>       stty ixon ixoff                  <$DTK_PORT &&\
> >>>       echo "this is /dev/t t y s $x" $'\r' >$DTK_PORT )&
> >>>   # if one of the above commands hangs, kill the process
> >>>       sleep 2; kill $! >/dev/null 2>&1
> >>>   done

-- 
L. C. Robinson
reply to no_spam+munged_lcr@onewest.net.invalid

People buy MicroShaft for compatibility, but get incompatibility and
instability instead.  This is award winning "innovation".  Find
out how MS holds your data hostage with "The *Lens*"; see
"CyberSnare" at http://www.netaction.org/msoft/cybersnare.html





[Index of Archives]     [Linux Speakup]     [Fedora]     [Linux Kernel]     [Yosemite News]     [Big List of Linux Books]