프로세스를 체크해서 실행스크립트 변수를 다르게 하고 싶습니다.

testano의 이미지

안녕하세요.

듀얼 튜너 TV 카드를 이용하여 cron 에 넣어서 예약녹화를 하고 있습니다.

그런데,

mplayer -dumpstream dvb://1@ebs -dumpfile /home/shez/download/ebs.ts

스크립트가 간단해서 이렇게 되는데요.

dvb://1@ebs 는 1번 튜너, dvb://2@ebs 는 2번 튜너를 사용하여 녹화를 하는것입니다.

그런데, 동시간대에 여러 프로그램이 있고 ,

가끔 TV 시청을 하다보니 사용중인 Tuner 번호선택을 잘못해서 녹화가 되지 않는일이 종종 있습니다.

그래서 쉘 스크립트안에서 위에 프로세스중 dvb://1@ 이나 dvb://2@을 감지해서, 자동으로 사용하지 않는 튜너로 녹화를 하고 싶은데요.

어떻게 하면 될까요?

쉘 스크립트는 전혀 몰라서요.

고수님들께 부탁드리겠습니다.

ymir의 이미지

script 시작시에 touch /tmp/tuner1_used 와 같이 임시 파일 생성하고, script 종료시에 이 파일 삭제 하도록 하면..
간단히 mutex 흉내를 낼 수 있을 것 같네요.

파일이 있으면 그 튜너가 사용중이니, 다른 튜너를 고를 수 있겠죠.

#!/bin/sh
selected_tuner=
for tun_no in 1 2
do
  if [ -f /tmp/tuner${tun_no}_used ] ; then
    echo tuner $tun_no is already used ..
    continue;
  else
    touch /tmp/tuner${tun_no}_used
    echo tuner $tun_no is selected ..
    selected_tuner=${tun_no}
    break;
  fi
done
 
if [ -z "$selected_tuner" ] ; then
  echo all tuner is busy ..
  exit 1;
fi
 
.. 작업..
 
/bin/rm -f /tmp/tuner${selected_tuner}_used
exit 0;

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

testano의 이미지

한번 해볼께요..답변 정말 감사합니다.^^

해봤는데요, 녹화시간(길이)을 어떻게 지정하는지를 모르겠습니다.

중간에 cron 으로 프로세스를 죽이면 /tmp/tuner1_used 이 파일이 지워지지 않아서 다음 녹화를 할 수가 없었습니다.

..작업 .. 이라고 하신부분에 녹화 실행부분을 넣어서 돌렸는데, 튜너는 제대로 잘 찾았습니다.

그런데, 중간에 스크립트를 중지시키면, /tmp/tuner* 파일이 남아서 수동으로 삭제를 해야 했습니다.

mplayer -dumpstream dvb://$selected_tuner@$channel -dumpfile /home/shez/download/$DAT.ts

이 부분을 일정 시간(1시간) 동안만 실행한후

/bin/rm -f /tmp/tuner${selected_tuner}_used
exit 0;

이 부분을 실행하게 하고 싶은데 어떻게 해야 할까요?

지금까지 무식하게 해오던 방식으로 써야 할까봅니다. ^^

ymir의 이미지

그건 어디까지나 스크립트가 정상적으로 수행되고 종료되었을 때를 가정한거라..
중간에 스크립트를 강제로 종료 시키셨다면 저 임시 파일들은 직접 정리를 해주셔야 합니다.

trap 을 걸어서 처리할 수도 있기는 한데, SIGKILL 로 죽이는 경우에는 어차피 같은 상황이라..
가급적 스크립트가 제대로 수행되도록 해 주는게 나을 것 같네요.

mplayer 에 timeout 관련된 옵션이 없다면, linux 명령에 timeout 이란게 있습니다.

timeout 1h mplayer ..

를 주고 실행하면 해당 시간이 경과한 후에는 mplayer 명령에 TERM 시그널을 날립니다.
-s 옵션으로 KILL(9) 같은 다른 시그널을 지정할 수도 있습니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

testano의 이미지

터미널에선

time 1h mplayer ......

는 해보니 안되더군요...

time --foreground 1m mplayer ... 저 옵션을 줬더니 제대로 녹화도 되고, /tmp/tuner* 파일도 남기지 않았습니다.

이전에는 cron 에 이렇게 넣어서 사용했는데요..

30 15 * * 0 /home/shez/rec/inki.sh
0 17 * * 0 ps -ef | grep sbs | awk '{print $2}' | xargs kill -9

좀 귀차니즘때문에 질문을 하게 되었는데, 녹화할 프로그램이 수십개이다 보니 이제와서 다 바꾸기도 뭐한거 같습니다.

혹시 처음으로 TV 예약녹화를 하시는 분들께서는 ymir 님의 말씀에 따라하시면, 만들어야 할 스크립트수가 많이 줄어들것 같습니다.

아직 cron에 넣어서는 안돌려봐서 된다 안된다 말씀은 못드리겠습니다.

급히 녹화할때 쓰는 스크립트에만 적용해서 사용할까 합니다.

답변 주신 ymir 님 정말 감사합니다. ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.