script als cron job werkt niet, hulp zeer welkom!

Windows, Android, iOS, Linux, Chrome OS, ...
Plaats reactie
Ernie
Elite Poster
Elite Poster
Berichten: 838
Lid geworden op: 08 jun 2011, 06:35
Uitgedeelde bedankjes: 228 keer
Bedankt: 45 keer

Ik gebruik een RPi met 7" touchscreen als dashboard voor HA, LMS en een weer widget.
Door HTML tabs te gebruiken en iframes kan dat in chromium in kiosk mode om op die manier zo veel mogelijk van het schermoppervlak over te hebben.
Nu dacht ik een taak te plannen die iedere nacht chromium sluit en terug opstart.

Het script om dat te doen werkt maar niet als cron job en ik kan de reden niet vinden, dus alle hulp meer dan welkom.

Code: Selecteer alles

#! /bin/bash
pkill -o chromium
export DISPLAY=:0
"/usr/bin/chromium-browser" --kiosk --disable-pinch --noerrdialogs --disable-infobar$&
cron job

Code: Selecteer alles

23 35 * * * /bin/sh /home/pi/kiosk.sh
Gelukkig & gezond 2022!
CCatalyst
Elite Poster
Elite Poster
Berichten: 6659
Lid geworden op: 20 jun 2016, 18:36
Uitgedeelde bedankjes: 18 keer
Bedankt: 386 keer

Geen idee wat die $& daar doet. En ik zou pkill ook in een absolute path zetten, ook al weet cron in theorie waar die staat.

Soit, check log: /var/log/cron

==

Als je daar niets wijzer uit raakt, dan de output bekijken, op het einde van cron commando dit zetten: >> /home/pi/output.log 2>&1

ik zou daarna ook nog touch /home/pi/output.log doen en zet dat bestand daarna op chmod 777

Eenmaal de cron gedraaid zou moeten hebben, dat bestand bekijken

==

Je kan ook het script testen in dezelfde environment als cron

in je cron dit zetten (veronderstellend dat het je gebruikers cron is en niet de globale): * * * * * env > ~/environment

eenmaal die cron dan gedraaid heeft (na de volgende minuut), dit uitvoeren onder die gebruiker: env - `cat ~/environment` /bin/sh

en dan zit je in een shell met dezelfde environment als cron. Probeer je script daarin te draaien en check voor foutmeldingen. Indien geen foutmeldingen ligt het aan andere verschillen (vb gebrek aan interactiviteit).

Niet vergeten om exit uit de shell met die environment te doen, en ook die cronjob van hierboven niet vergeten te verwijderen achteraf.
brubbel
Elite Poster
Elite Poster
Berichten: 833
Lid geworden op: 04 jul 2012, 16:55
Uitgedeelde bedankjes: 63 keer
Bedankt: 167 keer

xauth probleem omdat chron jobs als andere user worden uitgevoerd?
liber!
Elite Poster
Elite Poster
Berichten: 783
Lid geworden op: 09 apr 2006, 17:48
Twitter: nathan_gs
Uitgedeelde bedankjes: 130 keer
Bedankt: 55 keer

Werkt er wel een cron deamon?

Gebruik je systemd of xinit?

Ps.
"#! /bin/bash" hoort geen spatie te zitten, maar dat is alvast niet het probleem.
Gebruikersavatar
Trojan
Elite Poster
Elite Poster
Berichten: 3229
Lid geworden op: 13 aug 2009, 21:10
Locatie: Kontich
Uitgedeelde bedankjes: 113 keer
Bedankt: 241 keer

Volgens mij is het redundant om enerzijds een shebang "#!" te gebruiken in je script, en dan nog eens expliciet

Code: Selecteer alles

/bin/sh
aan te roepen in je cron job.
In de eerste plaats zorgt de shebang er voor dat je net geen bash of sh moet aanroepen.

Also, uw cron tijden kloppen volgens wikipedia niet.

Code: Selecteer alles

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                   7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>
Dat strookt niet echt met hetgeen jij hebt opgegeven:

Code: Selecteer alles

23 35 * * * /bin/sh /home/pi/kiosk.sh
Pas dat eens aan naar het volgende:

Code: Selecteer alles

35 23 * * * /home/pi/kiosk.sh
De posts van deze gebruiker weerspiegelen op geen enkel moment de mening van Belgacom NV/SA.
CCatalyst
Elite Poster
Elite Poster
Berichten: 6659
Lid geworden op: 20 jun 2016, 18:36
Uitgedeelde bedankjes: 18 keer
Bedankt: 386 keer

Ja het zal idd dat wel zijn :-D Had er ook over gekeken.

Dat gezegd zijnde, als ik het lijntje van OP in m'n cron probeer te zetten, word ik meteen terechtgewezen met een "/tmp/crontab.pKVOMz":1: bad hour; errors in crontab file, can't install." Heeft OP dan niet iets soortgelijks gekregen?
Ordon
Elite Poster
Elite Poster
Berichten: 1573
Lid geworden op: 27 apr 2019, 06:52
Uitgedeelde bedankjes: 36 keer
Bedankt: 70 keer

Indien met bash scripts wil uitvoeren via cron: waarom niet al je omgeving goed zetten in cron?
En dan nog liefst de volledige path naam gebruiken van execs, log bestanden, etc
# crontab -e
SHELL=/bin/bash
MAILTO=[email protected]
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

# backup using the rsbu program to the internal 4TB HDD and then 4TB external
01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2

# Set the hardware clock to keep it in sync with the more accurate system clock
03 05 * * * /sbin/hwclock --systohc

# Perform monthly updates on the first of the month
# 25 04 1 * * /usr/bin/dnf -y update
Ernie schreef:cron job

Code: Selecteer alles

23 35 * * * /bin/sh /home/pi/kiosk.sh
Nu ga je een bash script uitvoeren via /bin/sh ...
CCatalyst
Elite Poster
Elite Poster
Berichten: 6659
Lid geworden op: 20 jun 2016, 18:36
Uitgedeelde bedankjes: 18 keer
Bedankt: 386 keer

Ordon schreef:Nu ga je een bash script uitvoeren via /bin/sh ...
Zal in casu wel gewoon werken vermoed ik.
Ordon
Elite Poster
Elite Poster
Berichten: 1573
Lid geworden op: 27 apr 2019, 06:52
Uitgedeelde bedankjes: 36 keer
Bedankt: 70 keer

Mogelijks, ja, maar het lijkt me opportuun om de TS een beetje meer wegwijs te maken.
Ik heb zeker niet de intentie om iemand met de vinger te wijzen, of zo.
In moderne linux distributies is /bin/sh vaak een link naar /bin/bash (of /bin/dash).
Maar dat wil niet zeggen dat het aanroepen van /bin/sh hetzelfde is als /bin/bash aanroepen...
If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.
Bron: bash(1) man page

Zo zal de bash specifieke syntax:

Code: Selecteer alles

exec  > >(tee logfile.txt)
fouten geven indien de shell begint met #!/bin/sh alhoewel er een softlink is sh->bash.
Bash gedraagt zich dan "zoveel mogelijk" als sh ...
En ja, dat geeft soms erg onverwachte resultaten. :wink:

Edit: ik zie net dat het script start met "#! /bin/bash". Dat moet alvast "#!/bin/bash" zijn, zonder spatie dus.
Ernie
Elite Poster
Elite Poster
Berichten: 838
Lid geworden op: 08 jun 2011, 06:35
Uitgedeelde bedankjes: 228 keer
Bedankt: 45 keer

Thanks guys, het werkt!
Het was dus idd het omkeren van die minuten/uren... :oops:
De rest dan ook maar opgekuist.

Ik heb geen ervaring met cron en bitter weinig met bash waardoor ik dus dingen heb samengeraapt; vandaar dat ik bv '/bin/sh' ertussen had gezet zonder te weten wat ik eigenlijk deed.
Gelukkig & gezond 2022!
Plaats reactie

Terug naar “Software en apps”