Bash skript spouštěný podle času

Bash skript spouštěný podle času
« kdy: 05. 08. 2023, 07:51:55 »
Zdravim. Bych chtěl poprosit o pomoc.

Kód: [Vybrat]
#!/bin/bash
ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.149:554/user=admin_password=xxxx_channel=1_stream=0.sdp?real_stream -codec:v copy -an -t 01:00:00 /media/M2_disk_1TB/KAMERY/KURNIK/`date '+%Y-%m-%d-%H-%M-%S'`.mkv

Spouštím přes crona

Kód: [Vybrat]
0 6-14 * * * /home/pi/skripty/kurnik
Je to ok,funguje to.

Problem je, když potřebují raspi restartovat, tak se skript spustí až se začatkem dalši hodiny.
Pomuže mi to někdo vyřešit?
Na foru abclinuxu.cz mi poradili to vyřešit přes OnCalendar.

I když jsem googlil, a koukal na to, nějak nechapu jak to vyřešit.

Bych chtěl další skript.
Spustit přes crona @reboot /home/pi/skripty/kurnikReboot
A aby to začalo nahrávat a nahrávalo do té doby, než se spustí další skript v celou hodinu.

Tedy na začátku skriptu se zkontrolovalo, za je čas mezi 6 - 15 hod. Pokud není, skript se ukonči
Pokud je v rozsahu 6 - 15 hod, začít nahrávat a  smyčka by hlídala, až čas dosáhne celou hodinu a pak ho ukončit.
Děkují.
« Poslední změna: 05. 08. 2023, 08:27:29 od Petr Krčmář »


alex6bbc

  • *****
  • 1 674
    • Zobrazit profil
    • E-mail
Re:Bash skript
« Odpověď #1 kdy: 05. 08. 2023, 08:00:03 »
a nebo to prvni spusteni po restartu neresit cronem apod., ale vrazit to do init.d at se spusti hned po startu systemu.

Re:Bash skript
« Odpověď #2 kdy: 05. 08. 2023, 08:10:28 »
Tak to je jedno, ja skripty spouštim přes rc.local.
Potřebují na začatku skriptu, než se spustí ffmpeg, zkontrolovat, da je čas mezí 6-15 hod.
Pokud není, skript se ukonči.
Pokud je, spustí se ffmpeg.


Re:Bash skript
« Odpověď #3 kdy: 05. 08. 2023, 09:54:32 »
Potřebuji na začátku skriptu, než se spustí ffmpeg, zkontrolovat, zda je čas mezí 6-15 hod.

Získat hodinu z programu "date" a porovnat.

Citace
hour=$(date +%H)
if [ "$hour" -lt 15 -a "$hour" -ge 6 ]; then
    # do stuff
fi

Bacha mezery kolem hranatých závorek jsou důležité.

k3dAR

  • *****
  • 3 056
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Bash skript spouštěný podle času
« Odpověď #4 kdy: 05. 08. 2023, 16:38:08 »
vcetne dopocitani casu pro zaznam:
Kód: [Vybrat]
#!/bin/bash

time=$(date +%H:%M)
hour="${time/:*}"
min="${time/*:}"

if [[ ${hour} -ge 6 && ${hour} -lt 15 ]]; then
    rectime="00:$(( 60 - ${min} ))"
    echo "Record this time: ${rectime}"
fi


Re:Bash skript
« Odpověď #5 kdy: 06. 08. 2023, 11:54:55 »
#!/bin/bash
hour=$(date +%H)
if [ "$hour" -lt 15 -a "$hour" -ge 6 ]; then
    # do stuff
fi

/home/pi/kurnik3: řádek 5: chyba syntaxe poblíž neočekávaného tokenu „fi“
/home/pi/kurnik3: řádek 5: `fi'

Co dělam špatně?



Re:Bash skript spouštěný podle času
« Odpověď #6 kdy: 06. 08. 2023, 12:20:44 »
vcetne dopocitani casu pro zaznam:
Kód: [Vybrat]
#!/bin/bash

time=$(date +%H:%M)
hour="${time/:*}"
min="${time/*:}"

if [[ ${hour} -ge 6 && ${hour} -lt 15 ]]; then
    rectime="00:$(( 60 - ${min} ))"
    echo "Record this time: ${rectime}"
fi

To je ono. Ale bych to potřeboval trochu upravit.
Record this time: 00:47
Doba nahravaní je tedy 47 minut.
ffmpeg to však potřebuje ve formatu -t 00:47:00 jinak to bere jako 47 vteřin.
Kód: [Vybrat]
#!/bin/bash
time=$(date +%H:%M)
hour="${time/:*}"
min="${time/*:}"

if [[ ${hour} -ge 6 && ${hour} -lt 15 ]]; then
    rectime="00:$(( 60 - ${min} ))"
    echo "Record this time: ${rectime}"
   ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.149:554/user=admin_password=xxxxxx_channel=1_stream=0.sdp?real_stream -codec:v copy -an -t ${rectime} /media/M2_disk_1TB/KAMERY/KURNIK/`date '+%Y-%m-%d-%H-%M-%S'`.mkv
fi
Děkují.

Re:Bash skript
« Odpověď #7 kdy: 06. 08. 2023, 15:07:06 »
#!/bin/bash
hour=$(date +%H)
if [ "$hour" -lt 15 -a "$hour" -ge 6 ]; then
    # do stuff
fi

/home/pi/kurnik3: řádek 5: chyba syntaxe poblíž neočekávaného tokenu „fi“
/home/pi/kurnik3: řádek 5: `fi'

Co dělam špatně?

Podle mého mu jenom chybělo nějaké tělo mezi "then" a "fi".
Ten řádek s křížkem je jenom komentář.

A co se týče "00:47" -> "00:47:00" , co třeba jedna ze dvou variant:

${rectime}:00

rectime="00:$(( 60 - ${min} )):00"

Re:Bash skript
« Odpověď #8 kdy: 06. 08. 2023, 17:18:15 »

A co se týče "00:47" -> "00:47:00" , co třeba jedna ze dvou variant:

${rectime}:00

rectime="00:$(( 60 - ${min} )):00"

Děkují moooc. Funguje  ;)