regulating the time a process can run with crontab?

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

 



Yes, mp3 shoutcast streams can be recorded this way. I've tested before.
Someone told me about using lynx --source for this one. If you want to play
it, pipe lynx's output in to mpg123. The output is mp3.
At 02:27 AM 1/8/02 -0700, you wrote:
>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
>
>
>
>_______________________________________________
>
>Blinux-list@redhat.com
>https://listman.redhat.com/mailman/listinfo/blinux-list
>
>





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