Shellscript zum Starten / Stoppen von Programmen

K

kuehlmeister

Grünschnabel
Folgendes Problem

Ich habe ein Terminalprogramm, welches einmal am Tag gestartet wird und auf einem bestimmten Port auf Daten wartet.
Diese werden dann in eine .txt Datei geschrieben. Die Datei trägt immer das aktuelle Datum.

Nun läuft das Programm den ganzen Tag, abends soll es sich beenden und am nächsten Tag wieder starten und somit
eine neue tagesaktuelle Datei erstellen. Im Moment mache ich das noch händisch, d.h. ich starte und stoppe das Script
täglich immer selber. Nur steht demnächst Urlaub an, und da muss das automatisch laufen.

Hier mal das Terminalscript:

#!/bin/sh
clear
echo '************************************'
echo '** Fenster unbedingt offen halten **'
echo '** Drucktestanlage 1 in Betrieb **'
echo '************************************'
touch werte/anlage1_drucktest_`date +%Y%m%d`.txt
chmod 777 werte/anlage1_drucktest_`date +%Y%m%d`.txt
telnet 192.168.0.102 10001 > werte/anlage1_drucktest_`date +%Y%m%d`.txt

Das funktioniert soweit.

Nun möchte ich eine Automatik haben, welche das Script dann abends wieder beendet und neu startet.
Dachte vielleicht an ein 2tes Script, welches ein ps -ax macht, die Zeile mit dem Terminal sucht und den Prozess killt.
Daran scheiter ich allerdings.

Geht bestimmt auch eleganter, nur weiss ich leider nicht wie.

Danke schonmal!
 
Hallo Kühlmeister
man 5 crontab
Dort kannst Du Zeiten und Programme eintragen. der Cron Dämon (crond) sollte dafür laufen.
Gruss
maxix
 
maxix schrieb:
Hallo Kühlmeister
man 5 crontab
Dort kannst Du Zeiten und Programme eintragen. der Cron Dämon (crond) sollte dafür laufen.
Gruss
maxix

ok danke, das werde ich mal probieren. Stoppt der das Script dann auch wieder oder lässt der das durchlaufen?
 
wenn Du da keine Endlosschleife in Deinem Script hast, ja.
Oder anders: starte mal Dein Script, wenn es sich beendet, dann lautet die Antwort, ja.

Gruss
maxix
 
Hallo
Stoppt der das Script dann auch wieder oder lässt der das durchlaufen?

Natürlich startet oder stoppt der cronjob von sich aus keinerlei Programme.
Der cronjob führt ledig die dort eingetragenen Programme/Skripte in der dafür eingetragenen Periode aus.
Du müstest also entweder ein Skript für den Start und eines für den kill erstellen, oder beides in das gleiche Script schreiben und dabei prüfen ob das Script läuft.
Läuft es, wird beendet - läuft es nicht, wird gestartet.

Die einfache Variante ist wohl die erste.

Zum Beenden könntest du einfach pkill verwenden.
pkill -x "myscript" mit pkill hast du den Vorteil, dass du direkt den Namen statt der ID angeben kannst.

Natürlich kannst du auch mit folgender Zeile die ID ermitteln (Programm läuft):
MYID=$(ps ax|grep "kriptname"|cut -d" " -f2)
und dann per kill das Programm beenden ->wenn $MYID nicht leer ist...
Beispiel:
Code:
[b]
/usr/bin/bash
#Path kann auch in der crontab festgelegt werden
PATH=/usr/bin:/path/zum/Programm/:/path/zu/den/benoetigten/programmen;
MYID=$(ps ax|grep "[s]kriptname"|cut -d" " -f2);     
if [ -n $MYID ];
then
echo "Programm läuft mit ID $MYID und wird gekillt";
kill $MYID;
unset $MYID;

else
echo "Programm läuft nicht wird gestartet";
/path/zum/Programm/
#prüfen ob der Start geklappt hat usw.
...
fi
[/b]

Den Rest kannst du dir erlesen in
man crontab
man kill
man pkill

;)
Gruß Wolfgang
 
Wolfgang schrieb:
Hallo


Natürlich startet oder stoppt der cronjob von sich aus keinerlei Programme.
Der cronjob führt ledig die dort eingetragenen Programme/Skripte in der dafür eingetragenen Periode aus.
Du müstest also entweder ein Skript für den Start und eines für den kill erstellen, oder beides in das gleiche Script schreiben und dabei prüfen ob das Script läuft.
Läuft es, wird beendet - läuft es nicht, wird gestartet.

Die einfache Variante ist wohl die erste.

Zum Beenden könntest du einfach pkill verwenden.
pkill -x "myscript" mit pkill hast du den Vorteil, dass du direkt den Namen statt der ID angeben kannst.

Natürlich kannst du auch mit folgender Zeile die ID ermitteln (Programm läuft):
MYID=$(ps ax|grep "kriptname"|cut -d" " -f2)
und dann per kill das Programm beenden ->wenn $MYID nicht leer ist...
Beispiel:
Code:
[b]
/usr/bin/bash
#Path kann auch in der crontab festgelegt werden
PATH=/usr/bin:/path/zum/Programm/:/path/zu/den/benoetigten/programmen;
MYID=$(ps ax|grep "[s]kriptname"|cut -d" " -f2);     
if [ -n $MYID ];
then
echo "Programm läuft mit ID $MYID und wird gekillt";
kill $MYID;
unset $MYID;

else
echo "Programm läuft nicht wird gestartet";
/path/zum/Programm/
#prüfen ob der Start geklappt hat usw.
...
fi
[/b]

Den Rest kannst du dir erlesen in
man crontab
man kill
man pkill

;)
Gruß Wolfgang



danke, damit hats geklappt. hab nun ein extrascript gebastelt welches per cron aufgerufen wird und das checkt. :D
 

Ähnliche Themen

verzeichniss suche funktioniert nicht

Queue für copy Script

Last mit etc/passwd anzeigen lassen

tar network backup problem

Prozess aus eigenem Init script wird gekillt

Zurück
Oben