Forum: PC-Programmierung Befehl in crontab wird nicht ausgeführt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von C.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Debian-System, bei dem die serielle Schnittstelle nach dem 
Booten so definiert ist:
1
crw--w---- 1 root tty 251, 0 Jan 24 19:37 /dev/ttyS0

Ich bin Mitglied in der Gruppe tty und kann mit minicom auf die ttyS0 
nicht zugreifen, dazu brauche ich Lese- und Schreibrechte, also:
1
sudo chmod 0660 /dev/ttyS0

Geht prima:
1
crw-rw---- 1 root tty 251, 0 Jan 24 19:37 /dev/ttyS0

Nun möchte das natürlich dauerhaft machen, also die /etc/crontab 
geändert:
1
@reboot root sleep 10 && chmod 0660 /dev/ttyS0

Leider passiert nach dem Booten nix, es ist wieder der alte Mist:
1
crw--w---- 1 root tty 251, 0 Jan 24 19:45 /dev/ttyS0

Das gleiche Spielchen mit der /etc/rc.local, auch da geht es nicht.
Was tun?

von knollo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Guten Abend !
Ich kann Dir die exakte Syntax jetzt nicht sagen, aber genau dafür mußt 
Du eine udev-Regel erstellen. Schau mal unter /lib/udev/rules.d nach, 
bei mir (Arch) werden die ser. Schnittstellen in der Default-Rule 
konfiguriert.
MfG Knollo

von knollo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Deine Änderung gehört dann nach /etc/udev/rules.d

von C.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Habe jetzt eine Datei /etc/udev/rules.d/51-tty.rules
1
# /etc/udev/rules.d/51-tty.rules
2
# setzt Rechte für /dev/ttyS0 - ttyS9
3
4
SUBSYSTEM=="tty", KERNEL=="ttyS[0-9]*", GROUP="tty", MODE="0666"

hilft nur nix.

von blubb (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Muss man nicht member von dialout sein um auf die Schnittstellen 
schrebien zudürfen?


http://wiki.gacq.com/index.php/Debian_default_system_groups_description

von C.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
blubb schrieb:
> Muss man nicht member von dialout sein um auf die Schnittstellen
> schrebien zudürfen?

Hier ist es die Gruppe tty, wie Du an der Zeile aus dem Listing siehst
1
crw--w---- 1 root tty 251, 0 Jan 24 19:37 /dev/ttyS0

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
C.S. schrieb:
> blubb schrieb:
>> Muss man nicht member von dialout sein um auf die Schnittstellen
>> schrebien zudürfen?
>
> Hier ist es die Gruppe tty, wie Du an der Zeile aus dem Listing
> siehst
> crw--w---- 1 root tty 251, 0 Jan 24 19:37 /dev/ttyS0

Welche Distribution ist das denn? Ich kenne es auch nur so, dass ttyS*, 
ttyUSB* u.s.w. zur Gruppe dialout gehören und dass die Gruppe auch 
sowohl Lese- als auch Schreibzugriff hat. Irgendwas scheint da bei dir 
verkorkst zu sein.
Auch die minor-inode-Nummer sieht merkwürdig aus.
Bei mir sieht es standardmäßig so aus:
1
crw-rw---- 1 root dialout   4, 64 Jan 20 16:34 /dev/ttyS0

Deine Ausgabe sieht eher aus wie das, was eigentlich zu /dev/tty0 
gehört:
1
crw--w---- 1 root tty       4,  0 Jan 20 16:34 /dev/tty0

: Bearbeitet durch User
von Kaj G. (Firma: RUB) (bloody)


Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Welche Distribution ist das denn?

Da der TO was von
> /etc/rc.local
schreibt, tippe ich mal auf Debian.

von knollo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo !
Meine Erfahrung lehrt, das es nicht auf Anhieb gelingt, also etwas 
Geduld!
Eventl. liegt's an der Reienfolge de Abarbeitung. Benenne 
/etc/udev/rules.d/51-tty.rules in /etc/udev/rules.d/90-tty.rules um ! 
Wenn Du MODE="0666" schreibst, darf jeder (was ja eventl. gewollt ist) 
auf die Schnittstelle zugreifen. Die Quick & Dirty Lösung ist die 
direkte Änderung in /lib/udev. Das kann dann allerdings nach einem 
Update wieder weg sein. Nach den Änderungen den udev neu starten, damit 
dieser seine Konfiguration neu einliest! Ach ja, was sagt denn das 
Syslog?
MfG Knollo

von C.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Erst mal vielen Dank für die Tips.

Leider hat auch die Umnummerierung der udev-Rule nichts gebracht, nach 
einem Reboot sind die Rechte der Gruppe nur auf W gesetzt. Ich habe habe 
aber herausgefunden, dass der Neustart des udev-Systems mit 'sudo 
udevadm trigger' doch noch zu einer korrekten Einstellung auf RW führt. 
Aber dann kann ich auch hergehen und das mit chmod machen. Komisch finde 
ich nach wie vor, dass chmod auch mit Wartezeit weder in der crontab 
noch in der rc.local zum gewünschten Ergebnis führt, bei manueller 
Eingabe im Terminal dagegen schon.

Zur Frage des "verkorksten" Systems: das ist das Debian-Derivat armbian, 
welches auf einem Orangepi-One läuft. Ich habe hier etliche Rechner 
rumliegen, alle auf Debian-Basis, da ist das mal so und mal so. Die 
Gruppe der /dev/ttyS0 kann tty oder auch dialout sein, mal sind die 
Rechte auf W und manchmal auf RW gesetzt. Meine Arbeitsrechner mit 
Ubuntu 16.04 LTS machen das mit RW und dialout immer richtig, ein Zesty 
auf einem Proberechner macht nur ein W, ein Debian Jessie macht ein RW, 
ein Debian Stretch macht ein W, bei 4 Raspberries sind 3 so und 1 
anders. Alles SEHR merkwürdig.

von C.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Beim lesen meines eigenen Beitrages kam mir eine Idee, die ist zwar 
"durch die Schulter ins Knie", funktioniert aber:

Die udev-Regel funktioniert ja prinzipiell, aber nicht auf von alleine. 
Das kann am systemd beim Start liegen, wo manche Dinge quasi parallel 
ablaufen. Wenn die udev-Regel angewendet wird, ist die Schnittstelle 
möglicherweise noch nicht aktiv. Also habe ich in die crontab eine Regel 
rein, die nach einem reboot 10 Sekunden wartet und dann das udev-System 
neu startet
1
@reboot  root  sleep 10 && udevadm trigger

Und es geht !!!

von c.m. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
C.S. schrieb:
> Komisch finde
> ich nach wie vor, dass chmod auch mit Wartezeit weder in der crontab
> noch in der rc.local zum gewünschten Ergebnis führt, bei manueller
> Eingabe im Terminal dagegen schon.

mach mal ein script daraus, und gibt immer den vollen pfad an, auch in 
der crontab.
#!/bin/bash nicht vergessen
1
 @reboot /pfad/zum/script.sh
oder
1
 @reboot /bin/bash /pfad/zum/script.sh
cron hat manchmal probleme mit der ${PATH} variblan - da steht dann 
vielleicht nur /bin und /sbin drin.
ich denke mal, dass dein cron modern genug ist, dass du in der crontab 
auch PATH exportieren kannst.
so z.b.:
1
 # crontab  -l
2
 SHELL=/bin/bash
3
 PATH=/home/kel/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
4
5
 10 */2 * * * /home/kel/bin/unison_backup.sh >/home/kel/messages  2>&1

von C.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
c.m. schrieb:
> mach mal ein script daraus, und gibt immer den vollen pfad an, auch in
> der crontab.

Geht leider nicht.

von C.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
C.S. schrieb:
>> mach mal ein script daraus, und gibt immer den vollen pfad an, auch in
>> der crontab.
>
> Geht leider nicht.

Im 2. Anlauf ging es dann doch, da kann ich mir sogar den Umweg mit den 
Rules sparen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.