it-swarm.com.de

Ein einfaches Shell-Skript als Cronjob ausführen

Ich habe ein sehr einfaches Shell-Skript, das ich als Cronjob ausführen muss, aber ich kann nicht einmal die Testskripts ausführen. Hier ist ein Beispielskript:

/home/myUser/scripts/test.sh

#!/bin/bash
touch file.txt

crontab:

* * * * * /home/myUser/scripts/test.sh

Das Skript läuft einwandfrei vom Terminal aus, kann jedoch nicht als Cronjob ausgeführt werden. Bisher habe ich diese in crontab ausprobiert:

Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

* * * * * /bin/bash /home/myUser/scripts/test.sh

Und das in der Skriptdatei:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myUser/scripts

Aus dem, was ich herausgefunden habe, könnte die Lösung in der PATH-Variablen liegen, aber ich kann nicht herausfinden, was es ist, da mein Verständnis zu diesem Zeitpunkt sehr begrenzt ist. Meine Frage ist also, wie bekomme ich meine Skripte als Cronjobs?

BEARBEITEN: Die Datei hat für alle Benutzer RWX-Berechtigungen. Dies ist nur zu Testzwecken.

EDIT: cronjobs wie * * * * * touch /home/myUser/scripts/test.txt funktionieren, aber es werden keine Skripte ausgeführt.

15
tomtomssi

In welchem ​​Verzeichnis befindet sich file.txt? cron führt Jobs in Ihrem Home-Verzeichnis aus. Wenn Ihr Skript cds nicht an einem anderen Ort ist, wird dort nach/create file.txt gesucht.

BEARBEITEN: Wenn Sie auf eine Datei verweisen, ohne ihren vollständigen Pfad anzugeben (z. B. file.txt, im Gegensatz zum vollständigen Pfad /home/myUser/scripts/file.txt) in Shell, wird davon ausgegangen, dass Sie auf eine Datei in Ihrem aktuellen Arbeitsverzeichnis verweisen. Wenn Sie ein Skript ausführen (interaktiv oder über crontab), hat das Arbeitsverzeichnis des Skripts überhaupt nichts mit der Position des Skripts selbst zu tun. Stattdessen wird es von dem übernommen, was das Skript ausgeführt hat.

Wenn Sie also cd (Arbeitsverzeichnis ändern) in das Verzeichnis wechseln, in dem sich das Skript befindet, und es dann ausführen, verweist file.txt auf eine Datei im selben Verzeichnis wie das Skript. Wenn Sie cd dort nicht zuerst verwenden, verweist file.txt auf eine Datei in dem Verzeichnis, in dem Sie sich gerade befanden, als Sie das Skript ausgeführt haben. Wenn Ihr Home-Verzeichnis beispielsweise/home/myUser ist und Sie eine neue Shell öffnen und das Skript sofort ausführen (da scripts/test.sh oder /home/myUser/scripts/test.sh; ./test.sh nicht funktioniert), wird die Datei/home/myUser/file berührt. txt, da/home/myUser Ihr aktuelles Arbeitsverzeichnis ist (und daher das Skript).

Wenn Sie ein Skript aus cron ausführen, wird im Wesentlichen dasselbe ausgeführt: Es führt es mit dem Arbeitsverzeichnis aus, das auf Ihr Basisverzeichnis gesetzt ist. Daher werden alle Dateiverweise im Skript relativ zu Ihrem Basisverzeichnis übernommen, es sei denn, das Skript cds wird an einer anderen Stelle angegeben oder gibt einen absoluten Pfad zur Datei an.

8
Gordon Davisson

Der einfachste Weg wäre die Verwendung einer GUI:

Für Gnome verwenden Sie gnome-schedule (Universum)

Sudo apt-get install gnome-schedule 

Verwenden Sie für KDE kde-config-cron

It should be pre installed on Kubuntu

Wenn Sie jedoch einen Linux ohne Heads verwenden oder keine GUIs wünschen, können Sie Folgendes verwenden:

crontab -e

Wenn Sie es in Terminal eingeben, erhalten Sie eine Tabelle.
Sie müssen jetzt Ihre Cronjobs einfügen.
Formatieren Sie einen Job wie folgt:

*     *     *     *     *  YOURCOMMAND
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- Day in Week (0 to 7) (Sunday is 0 and 7)
|     |     |     +------- Month (1 to 12)
|     |     +--------- Day in Month (1 to 31)
|     +----------- Hour (0 to 23)
+------------- Minute (0 to 59)

Es gibt auch einige Kurzfilme (wenn Sie das * nicht möchten):

@reboot --> only once at startup
@daily ---> once a day
@midnight --> once a day at midnight
@hourly --> once a hour
@weekly --> once a week
@monthly --> once a month
@annually --> once a year
@yearly --> once a year

Wenn Sie die Shorts als cron verwenden möchten (weil sie nicht funktionieren oder so),

@daily --> 0 0 * * *
@midnight --> 0 0 * * *
@hourly --> 0 * * * *
@weekly --> 0 0 * * 0
@monthly --> 0 0 1 * *
@annually --> 0 0 1 1 *
@yearly --> 0 0 1 1 *
8
sn0w

Versuchen,

 # cat test.sh
 #!/bin/bash
 /bin/touch file.txt

cron als:

 * * * * * /bin/sh /home/myUser/scripts/test.sh

Und Sie können dies bestätigen durch:

 # tailf /var/log/cron
2
Ranjithkumar T

Geben Sie den vollständigen Pfad an und erteilen Sie der Skriptdatei die entsprechende Berechtigung. Ich habe folgende Skriptdatei ausprobiert, um durch cron zu laufen:

#!/bin/bash
/bin/mkdir /scratch/ofsaaweb/CHEF_FICHOME/ficdb/bin/crondir

Und Crontab-Befehl ist

* * * * * /bin/bash /scratch/ofsaaweb/CHEF_FICHOME/ficdb/bin/test.sh

Es hat für mich funktioniert.

0

Bei cron sollte es auch richtig laufen. Bitte überprüfen Sie die folgenden Punkte.

1- Sie bearbeiten die richtige Datei, um cron einzustellen.

2- Sie haben die richtige Berechtigung (Ausführungsberechtigung) für ein Skript erteilt, was bedeutet, dass Ihr Skript ausführbar ist. 

0
virus