crontab "beschneidet" einen Befehl

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
BuildingDave
Beiträge: 4
Registriert: 10.12.2015 06:19:34

crontab "beschneidet" einen Befehl

Beitrag von BuildingDave » 12.10.2016 07:01:53

Hallo an Alle :-)

Ich nutze ein Programm um eine Karte zu rendern.

Wenn ich einen screen selbst erstelle, dort rein gehe und den Befehl

Code: Alles auswählen

overviewer.py --config=/backup-1tb/www/map.cfg
ausführe klappt alles wie es soll.

Jetzt wollte ich das ganze über meine Crontab unter Debian 8 automatisieren.
Also habe ich folgendes in die Crontab eingetragen:

Code: Alles auswählen

05  2  *  *  *  screen -S render -X stuff $'overviewer.py --config=/backup-1tb/www/map.cfg\n'
Pünktlich um 2:05 Uhr wird die Crontab ausgeführt, ABER der Befehl wird beschnitten und deshalb nicht ausgeführt.

Wenn ich den Screen aufrufe steht dort:

Code: Alles auswählen

root@lb-10:~# .py --config=/backup-1tb/www/map.cfg
bash: .py: command not found
Was ist an meinem Eintrag im crontab falsch, dass er immer nur .py statt overviewer.py ausführt?

Freue mich auf hilfreiche Antworten.

Gruß
Dave

DeletedUserReAsG

Re: crontab "beschneidet" einen Befehl

Beitrag von DeletedUserReAsG » 12.10.2016 07:31:07

Beim ersten Drüberschauen fällt auf, dass du die falschen Anführungsstriche für die Befehlssubstitution verwendest. Da gehören Backticks (`) statt einfacher (') hin – in den meisten Fällen ist $(zeugs) statt $`zeugs` auch die bessere Variante. Weiterhin sollten in Crontabs absolute Pfade verwendet werden, damit der Kram gefunden wird.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: crontab "beschneidet" einen Befehl

Beitrag von Meillo » 12.10.2016 08:56:07

niemand hat geschrieben:$(zeugs) statt $`zeugs`
Zweiteres ist bestimmt nicht was du sagen wolltest. Entweder $(foo) oder `foo`.

$'foo' ist jedenfalls nicht valide fuer /bin/sh, mit der die Eintraege in der Crontab ausgefuehrt werden. Vielleicht ist es ein Bashism, dann kannst du SHELL=/bin/bash probieren, aber besser du ersetzt es durch ein portables Konstrukt.
Use ed once in a while!

DeletedUserReAsG

Re: crontab "beschneidet" einen Befehl

Beitrag von DeletedUserReAsG » 12.10.2016 09:12:19

Ja, hast natürlich Recht. Ich selbst nutze ausschließlich $(…), deswegen hatte ich die Backticks nur noch entfernt und offensichtlich mit falscher Syntax im Kopf. Liegt auch daran, dass ich soo viele verschiedene ', ‘, ’, `, …, auf der Tastatur habe und immer erst überlegen muss, welches noch gleich das Richtige war – die Klammern habe ich schneller zur Hand ;)

Allerdings ist $'blub' in der Bash hier auch irgendwie nix Sinnvolles:

Code: Alles auswählen

$ echo $'date'
date

$ echo $(date)
Mi 12. Okt 09:16:33 CEST 2016

$ echo `date`
Mi 12. Okt 09:17:10 CEST 2016
– ich bin nun davon ausgegangen, dass der Threadstarter etwas wie die letzten beiden Ergebnisse erzielen wollte.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: crontab "beschneidet" einen Befehl

Beitrag von Meillo » 12.10.2016 09:22:52

niemand hat geschrieben: Allerdings ist $'blub' in der Bash hier auch irgendwie nix Sinnvolles:
Es gibt das Konstrukt in der Bash zumindest:

Code: Alles auswählen

       Words  of  the form $'string' are treated specially.  The
       word expands to string, with backslash-escaped characters
       replaced  as specified by the ANSI C standard.  Backslash
       escape sequences, if present, are decoded as follows:
              \a     alert (bell)
              \b     backspace
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
              \t     horizontal tab
              \v     vertical tab
              \\     backslash
              \'     single quote
              \"     double quote
              \nnn   the eight-bit character whose value is  the
                     octal value nnn (one to three digits)
              \xHH   the  eight-bit character whose value is the
                     hexadecimal value HH (one or two  hex  dig‐
                     its)
              \uHHHH the Unicode (ISO/IEC 10646) character whose
                     value is the hexadecimal value HHHH (one to
                     four hex digits)
              \UHHHHHHHH
                     the Unicode (ISO/IEC 10646) character whose
                     value is  the  hexadecimal  value  HHHHHHHH
                     (one to eight hex digits)
              \cx    a control-x character

       The  expanded  result  is single-quoted, as if the dollar
       sign had not been present.
Use ed once in a while!

DeletedUserReAsG

Re: crontab "beschneidet" einen Befehl

Beitrag von DeletedUserReAsG » 12.10.2016 09:35:31

Gut zu wissen, für die Problematik hab’ ich mir bislang auch eher abenteuerliche Workaround ausgedacht. Aber ich denke weiterhin, dass es nicht ist, was der Threadstarter wollte. Allerdings bin ich mir auch gerade nicht ganz sicher, was er denn wollte: die betreffende Zeile einfach ausführen, oder deren Ausgabe in Screen verwursten?

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: crontab "beschneidet" einen Befehl

Beitrag von Meillo » 12.10.2016 09:48:32

niemand hat geschrieben:Gut zu wissen, für die Problematik hab’ ich mir bislang auch eher abenteuerliche Workaround ausgedacht.
Na, printf(1) halt.
Aber ich denke weiterhin, dass es nicht ist, was der Threadstarter wollte. Allerdings bin ich mir auch gerade nicht ganz sicher, was er denn wollte: die betreffende Zeile einfach ausführen, oder deren Ausgabe in Screen verwursten?
Ich kann mir denken, dass es ihm um das \n gehen wird. Was overviewer.py macht, kann man natuerlich nicht wissen.

Was er eigentlich will, *koennte* evtl. sowas sein:

Code: Alles auswählen

5  2  *  *  *  screen -S render -X stuff $(overviewer.py --config=/backup-1tb/www/map.cfg)
Die 0 bei der Zeitangabe sollte man weglassen. Das Newlinezeichen wird wohl nicht noetig sein.

... das alles hier ist Raterei, weil unklar ist was overviewer.py macht.
Use ed once in a while!

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22359
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: crontab "beschneidet" einen Befehl

Beitrag von KBDCALLS » 12.10.2016 11:37:09

Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

BuildingDave
Beiträge: 4
Registriert: 10.12.2015 06:19:34

Re: crontab "beschneidet" einen Befehl

Beitrag von BuildingDave » 13.10.2016 10:30:04

Hallo.

Danke zuerst mal für eure Hilfe...

Ja, es geht um diesen Overviewer von Minecraft.
Hier mal einen Link, sollte es noch jemand interessieren: http://map.eldercraft.de/

Es geht mir darum, dass der Befehl automatisch in dem Screen durch die Crontab ausgeführt wird.
Ein Screen deshalb, weil ich es bei Fehlern besser kontrollieren und sehen kann was denn nicht stimmt.

Einen ähnlichen Befehl fand ich bei einer Dokumentation weshalb ich auch die geraden ' nutzte.
Leider geht dieser Befehl auch nicht und zeigt keinerlei Wirkung oder Reaktion in dem Screen:

Code: Alles auswählen

5  2  *  *  *  screen -S render -X stuff $(overviewer.py --config=/backup-1tb/www/map.cfg)
Aber um das wieder zu verdeutlichen... mein Ziel ist es, dass der Befehl

Code: Alles auswählen

overviewer.py --config=/backup-1tb/www/map.cfg
in dem Screeen Namens render automatisch ausgeführt wird.
Leider bin ich eher ein Unwissender weshalb ich hier nach Rat frage. Meine googelei hat mich leider zu einem nicht so kompatiblem Befehl für die Crontab geführt...

DeletedUserReAsG

Re: crontab "beschneidet" einen Befehl

Beitrag von DeletedUserReAsG » 13.10.2016 10:41:23

Ach so, wenn es nur um das Ausführen geht: einfach in " oder ' setzen, ohne $ davor.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: crontab "beschneidet" einen Befehl

Beitrag von Meillo » 13.10.2016 11:03:05

niemand hat geschrieben:Ach so, wenn es nur um das Ausführen geht: einfach in " oder ' setzen, ohne $ davor.
Genau!
Use ed once in a while!

Antworten