Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hi, habe folgendes bash-script, das alle 15 Minuten läuft (also 00,15,30,45):

#!/bin/bash


## Define your websites in an array

sites=(site1.de site2.de)


len=${#sites[*]}

for((i=0; i<$len; i++)); do

        wget -O - -q -t 1 http://${sites[${i}]}/cron.php

done


## Nur 1x im Monat, jeden 7. um 3:00 Uhr nachts

tag_time=$(date +"%d-%H-%M")

datum=$(date +"%Y-%m-%d")

if ([ $tag_time = "07-03-00" ])

        then tar cfvj ~/scripts/backup/$datum.tar.bz ~/public_html/drupal &> /dev/null

fi

Der erste Teil tut, aber das backup wird einfach nicht erstellt, obwohl der cronjob zur richtigen Zeit startet. Wenn ich die uhrzeit ändere und das Script von Hand starte funktioniert es allerdings - nur über cron gehts nicht.

Habt Ihr Ideen, was das sein könnte?

Danke schonmal!

Gruß

Markus

Der erste Teil tut, aber das backup wird einfach nicht erstellt, obwohl der cronjob zur richtigen Zeit startet. Wenn ich die uhrzeit ändere und das Script von Hand starte funktioniert es allerdings - nur über cron gehts nicht.

Vermutlich dauert das wget der 2 Sites länger als eine Minute...?

Du solltest das Datum beim start des scripts ermitteln und festhalten. Sonst bist du immer davon abhängig wie lange Befehle brauchen bis du beim finalen if...then bist.

Danke schonmal allen!

@victorinox: Exit status 0, eine Fehlermeldung kommt nicht.

@DevilDawn: Teste ich gleich mal

@truebsalgeblaese: */15 * * * * /home/username/scripts/cron.bash

Der cron um den es geht läuft bei einem Web-Hoster, wo ich ssh-Zugriff drauf habe.

Ich habs mal nachgestellt, dabei sind mir 2 Dinge aufgefallen

1) Die Laufzeit des wget kann Probleme bereiten, wenns länger als 59 sek dauert :-)

2) Als was für ein User läuft die crontab? Weil mit falschem Benutzer bzw. fehlendem Recht kann der tar auch auf die Schnauze fallen...

tsg

Umgestellt (wget als zweites) und mit absoluten Pfadangaben ist es jetzt erfolgreich durchgelaufen, Danke!

Allerdings steht in der eMail, die ich zu jeder Ausführung des cronjob bekomme, er sei "wegen Zeitüberschreitung abgebrochen" worden.

Gab's da nicht auch mal einen Trick, das sich scripte selbst recursiv aufrufen bzw. sich selbst sourcen, damit keine Zeitüberschreitung kommt?

Allerdings steht in der eMail, die ich zu jeder Ausführung des cronjob bekomme, er sei "wegen Zeitüberschreitung abgebrochen" worden.

Eher rausfinden was genau da in einen Timeout rennt und das Problem beheben. Es wird ja nicht besser wenn man es neu ausführt.

Eher rausfinden was genau da in einen Timeout rennt und das Problem beheben.

Wie finde ich das denn raus? Wenn ich das gesamte script von Hand starte, dann läuft es in 18 Sekunden ab (time ./cronscript.bash).

Gibt es ein Zeitlimit für cronjobs oder bash-scripte? ulimit -t ist unlimited...

Wie finde ich das denn raus? Wenn ich das gesamte script von Hand starte, dann läuft es in 18 Sekunden ab (time ./cronscript.bash).

Gibt es ein Zeitlimit für cronjobs oder bash-scripte? ulimit -t ist unlimited...

Eventuell in die crontab statt

/pfad/zum/cronscript.bash

ein

/bin/sh -x /pfad/zum/cronscript.bash 2> /var/tmp/cronscript.debug

werfen, das nutzt den debugmodus und STDERR wird in die debugdatei umgeleitet. Die kann man sich dann ja mal anschauen

Außerdem sollte man bei externen Aufrufen wie wget, tar etc. gerne mal den exitcode testen. Man darf sich nie drauf verlassen das alles Funktioniert hat, gerade bei Scripts die unbeaufsichtigt laufen.

Das es spezielle Zeitlimits für cronjobs gibt wäre mir nicht bekannt - was nicht heißt das es sie nicht gibt... :)

Danke Dir, DevilDawn. Ich habe mal den Debug-output mitgelesen, alles funzt wie's soll, die exit-codes sind bei allen 0, trotz das ein Abbruch gemeldet wird.

Scheinbar kommt immer nach 20 Sekunden die Meldung, der Cronjob sei abgebrochen worden, auch wenn er durchgelaufen ist.

Wenn es ein Limit gibt wurmt es mich, das ich nichts darüber weiß :-)

Hier hat jemand das gleiche Problem (auf einem anderen hoster): Link

Ich hab irgendwie wohl überlesen dass das ganze auf einem Fremdhost stattfindet.

Nun ja, dann wirst du da wohl deinen Hoster zu befragen müssen und ggf. Updaten, oder die Aufgabe in mehrere Scripts aufteilen müssen um das CPU Limit zu umgehen.

um das CPU Limit zu umgehen.

Wie wird das Limit denn gesetzt? ulimit zeigt mit unlimited cpu time an, das kanns nicht sein...

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.