Mehrere Crontabs

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
BlackJack

@skorpionius: Crontab-Dateien die man in ``/etc/cron.d/`` ablegt kann man nennen wie man möchte, ansonsten heisst die globale ``/etc/crontab``. Und wie die vom Benutzer braucht Dich nicht zu kümmern denn die bearbeitet man nicht direkt sondern nur über den ``crontab``-Befehl.

Du hast das Skript hier abgetippt? Warum nicht kopiert? Das wäre weniger fehleranfällig und vor allem auch einfacher/schneller.

Wie schon gesagt kann der ``crond`` seine Aktivitäten loggen. Ob das auf Deinem Raspi konfiguriert ist und falls ja wohin der loggt musst Du halt schauen. Auf meinem Laptop landet das beispielsweise in ``/var/log/syslog``. Der Start vom Daemon sieht da zum Beispiel so aus:

Code: Alles auswählen

Oct 23 10:21:01 god cron[1238]: (CRON) STARTUP (fork ok)
Wenn Du spezifischere Informationen aus Deinen Skripten wissen möchtest dann könntest Du das ausgeben lassen und in der Crontab dann die Ausgabe in eine Datei umleiten. Am besten auch die Fehlerausgabe mit umleiten, damit keine Informationen verloren gehen.

Mit ausrechnen meinte ich *im Skript*. Also zum Beispiel eine Konstante definieren die eine Stunde als Sekunden enthält und die dann an der entsprechenden Stelle mit 11 multiplizieren.

Alles völlig ungetestet:

Code: Alles auswählen

#!/bin/bash

readonly SCRIPT_NAME=$(basename "$0")
readonly SCRIPT_PID=$$
readonly HOUR=$((60 * 60))  # One hour in seconds.
readonly SOME_PIN=23

log() {
    local message=$1

    echo "$(date '+%Y-%m-%d %H:%M:%S') $SCRIPT_NAME[$SCRIPT_PID] $message"
}

main() {
    local sleep_hours=11

    log "start and switch pin $SOME_PIN"
    gpio export "$SOME_PIN" out
    sleep 1
    gpio -g write "$SOME_PIN" 1
    

    log "sleep $sleep_hours hours"
    sleep $(($sleep_hours * $HOUR))

    log "switch pin $SOME_PIN"
    gpio -g write "$SOME_PIN" 0
    sleep 1
    gpio export "$SOME_PIN" in
    log 'end'
}

main
Und in der Crontab dann zum Ausführen und Umleiten der Ausgabe(n):

Code: Alles auswählen

* * * * * … /home/pi/scripts/parrot.sh 2>&1 >> /var/log/parrot.log
skorpionius
User
Beiträge: 17
Registriert: Montag 20. Oktober 2014, 11:43

Hallo,

wieder eine Anfängerfrage.
Nun habe ich an die gpio Ports eine 4 er Relaikarte geschaltet und daran die Leuchtdioden.
das funktioniert aber nur wenn ich den Skript

#1/bin/sh
gpio export 23 out
sleep 1
gpio -g write 23 1

sleep 120

gpio -g write 23 o
sleep 1
gpio export 23 in
#

kürze in:

#1/bin/sh
gpio export 23 out
sleep 120
gpio export 23 in
#

ansonsten schaltet das Relais mehrmals. In einer 'Anleitung im Netz hatte ich gelesen dass zum Schalten immer ein export und ein write Befehl benötigt wird. Das scheint nicht so oder? Denn das gekürzte Skript funktioniert.
Bin gespannt ob ich falsch oder richtig liege.

Gruß
Wolfgang
skorpionius
User
Beiträge: 17
Registriert: Montag 20. Oktober 2014, 11:43

Direkt eingegeben schaltet das Releais also gleich :

gpio export 22 out Relais schaltet ein
gpio export 22 in Relais fällt wieder ab
BlackJack

@skorpionius: Mit dem Argument ``export`` legt man fest ob ein Pin als Eingang oder als Ausgang geschaltet wird und mit ``write`` ob Strom oder kein Strom auf den Pin gelegt wird. Dazu muss er als Ausgang geschaltet sein. Es kann sein das sich der Treiber/Chip diesen Wert merkt und dadurch das Umschalten zwischen Ein- und Ausgang als ”Schalter” wirkt, gedacht ist das so aber nicht.
skorpionius
User
Beiträge: 17
Registriert: Montag 20. Oktober 2014, 11:43

aber was kann ich tun nur so funktioniert es
BlackJack

@skorpionius: Als erstes würde ich ``export`` mal ganz sein lassen weil Du ja nur das ``gpio``-Programm benutzt und es deshalb keinen Sinn macht die Pins für andere Programme zugänglich zu machen.

Und dann kannst Du einfach ignorieren dass das *so* nicht gedacht ist, oder Du versuchst zu verstehen warum sich das so verhält…
Antworten