ubuntuusers.de

Skript nach Reboot automatisch in einem Screen ausführen

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Kuki7000

Anmeldungsdatum:
20. Februar 2013

Beiträge: Zähle...

Moin, ich habe ein Skript erstellt (nennen wir es Mailversand_DAEMON.sh), welches alle 30 Sekunden über Curl eine PHP Seite in Intranet aufruft, die System-Mails verschickt.

Das Skript läuft wunderbar in einem Screen. Alles ist gut!

Nun möchte ich, dass es bei einem Neustart der Kiste automatisch gestartet wird.

Meine Frage:

Ist /etc/init.d/rc.local der richtige Ort dafür? Wie kann ich das Skript dort in einem Screen starten à la:

1. Befehl: screen -S Mailversand_DAEMON 2. Befehl im Screen: Aufruf des Skriptes im Screen: source Mailversand_DAEMON.sh

Wie kann ich das quasi automatisieren?

Vibaf

Ehemaliger

Anmeldungsdatum:
27. Dezember 2007

Beiträge: 3046

Ich würde es eher mit einem Eintrag in die crontab machen und es bei @reboot ausführen lassen.

Bei dem automatischen Ausführen in der Screen-sessin würde ich tricksen. In einer Screen-Session steht in der $TERM-Variable screen. Das kann man nutzen um es in der bashrc abzufragen - wirklich gut gelöst finde ich das allerdings nicht. Falls sonst keiner eine Idee hat, kannst du dem aber mal nachgehen.

Kuki7000

(Themenstarter)

Anmeldungsdatum:
20. Februar 2013

Beiträge: 5

Hallo Vibaf, vielen Dank für die Antwort.

Ich bin absoluter Beginner, was Linux angeht. Bin für die Ausführung als Cron job auch gerne zu haben. Habe mich für rc.local entschieden, weil ich gelesen hatte, dass die Aufrufe dort erst dann erfolgen, wenn die Runlevels durch sind, also Apache mit Sicherheit schon läuft (da ich mit curl die Seite aufrufe).

Auf die Ausführung im Screen lege ich keinen Wert, Mein Wunsch ist nur, dass mein Skript als Daemon läuft und alle 30 Sekunden die Mails aus dem Pipe versendet.

Wie muss ich denn voegehen, wenn ich es über cron lösen möchte? Ziel: Aufruf einer Intranet-Adresse (Bsp.: http://Intranet-Adresse/Mailversand.php) per curl alle 30 Sekunden in der Cron-Tabelle

Vibaf

Ehemaliger

Anmeldungsdatum:
27. Dezember 2007

Beiträge: 3046

Kuki7000 schrieb:

Bin für die Ausführung als Cron job auch gerne zu haben. Habe mich für rc.local entschieden, weil ich gelesen hatte, dass die Aufrufe dort erst dann erfolgen, wenn die Runlevels durch sind, also Apache mit Sicherheit schon läuft (da ich mit curl die Seite aufrufe).

Macht Sinn.

Auf die Ausführung im Screen lege ich keinen Wert, Mein Wunsch ist nur, dass mein Skript als Daemon läuft und alle 30 Sekunden die Mails aus dem Pipe versendet.

Warum brauchst du dann screen, wenn das Skript als Deamon laufen soll?

Wie muss ich denn voegehen, wenn ich es über cron lösen möchte? Ziel: Aufruf einer Intranet-Adresse (Bsp.: http://Intranet-Adresse/Mailversand.php) per curl alle 30 Sekunden in der Cron-Tabelle

30 Sekunden kann man in cron direkt nicht einstellen, aber man kann da mit sleep arbeiten.

Kuki7000

(Themenstarter)

Anmeldungsdatum:
20. Februar 2013

Beiträge: 5

Vibaf schrieb:

Warum brauchst du dann screen, wenn das Skript als Deamon laufen soll?

Das ist der Weg, den ich kenne, um Dinge zu tun, die über ein Logout hinaus existieren müssen, also bspw. coffee Skripte, die über einen PORT ansprechbar sein müssen, oder eben mein Skript, das permanent laufen muss. Einen anderen Weg kenne ich nicht / habe ich bis jetzt nicht ausprobiert.

30 Sekunden kann man in cron direkt nicht einstellen, aber man kann da mit sleep arbeiten.

Mit sleep arbeitet mein Skript schon jetzt. Hier ist der Inhalt des Skriptes:

#!/bin/bash

SLEEP=30

while true

do sleep $SLEEP

curl http://localhost/mailversand.php

done

Ich möchte, nur, dass alle 30 Sekunden per CURL die URL aufgerufen wird,permanent und über ein reboot hinaus. Wie trage ich es als crontab ein?

Danke nochmal.

Kuki7000

(Themenstarter)

Anmeldungsdatum:
20. Februar 2013

Beiträge: 5

Kleiner Nachtrag und eine weitere Frage:

Der Befehl

 
crontab -l

ergibt: no crontab for kuki und

 
sudo crontab -l

ergibt: no crontab for root

Kann ich daraus schließen, dass es keine Cron Jobs auf dem Server gibt??

Vibaf

Ehemaliger

Anmeldungsdatum:
27. Dezember 2007

Beiträge: 3046

Kuki7000 schrieb:

Vibaf schrieb:

Warum brauchst du dann screen, wenn das Skript als Deamon laufen soll?

Das ist der Weg, den ich kenne, um Dinge zu tun, die über ein Logout hinaus existieren müssen, also bspw. coffee Skripte, die über einen PORT ansprechbar sein müssen, oder eben mein Skript, das permanent laufen muss. Einen anderen Weg kenne ich nicht / habe ich bis jetzt nicht ausprobiert.

Wenn du das Skript per cron oder über /etc/rc.local startest, läuft das auch so weiter, wenn es nie ans Ende kommt oder ein exit aufgerufen wird.

30 Sekunden kann man in cron direkt nicht einstellen, aber man kann da mit sleep arbeiten.

Mit sleep arbeitet mein Skript schon jetzt. Hier ist der Inhalt des Skriptes:

1
2
3
4
5
6
#!/bin/bash
SLEEP=30
while true
do sleep $SLEEP
curl  http://localhost/mailversand.php
done

Ich möchte, nur, dass alle 30 Sekunden per CURL die URL aufgerufen wird, permanent und über ein reboot hinaus. Wie trage ich es als crontab ein?

In die Datei /etc/crontab die Zeile eintragen:

@reboot dein-username /Pfad/zum/skript

Als root solltest du das Skript am besten nicht ausführen, weshalb du da deinen Usernamen angeben kannst.

Kuki7000 schrieb:

Kann ich daraus schließen, dass es keine Cron Jobs auf dem Server gibt??

Nein, die bereits eingerichteten Cron-Jobs stehen in /etc/crontab oder einem dieser Verzeichnisse:

  • /etc/cron.d/

  • /etc/cron.daily/

  • /etc/cron.hourly/

  • /etc/cron.weekly/

  • /etc/cron.monthly/

Kuki7000

(Themenstarter)

Anmeldungsdatum:
20. Februar 2013

Beiträge: 5

Klasse. Vielen Dank.

Ich habe jetzt eine Datei namens sysmails_cronjob(ohne Endung) erstellt und diese im cron.d Verzeichnis abgelegt. Sie macht nichts anderes als alle 2 Minuten mein Skript aufzurufen, welches wiederrum die PHP Seite aufruft. Der Datei (der "Cronjob") beinhaltet folgende Zeile:

*/2 * * * * source /home/.../sysmails.sh

Die Skript-Datei (sysmails.sh) hat folgenden Inhalt:

curl http://localhost/abc.php''' Würde das so funktionieren? Wie kann ich es testen (ich darf den Rechner nicht neustarten)? Würde beim Neustart des Servers das Skript alle 2 Minuten aufgerufen werden?

Vibaf

Ehemaliger

Anmeldungsdatum:
27. Dezember 2007

Beiträge: 3046

Warum so kompliziert?

Skript:

1
2
3
4
5
#!/bin/bash
while true; do
   sleep 30
   curl http://localhost/mailversand.php
done

Zeile für die Crontab:

@reboot username /pfad/zum/skript

Dein Skript wird nie enden und beim Systemstart mit deinen Rechten ausgeführt. ☺

Antworten |