Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Linux - Jede Minute ein Befehl in einem ShellScript ausführen

Mitglied: Lousek

Lousek (Level 2) - Jetzt verbinden

17.12.2008, aktualisiert 18.12.2008, 10929 Aufrufe, 12 Kommentare

Hallo Forum.

Bin noch blanker Anfänger was Shell-Scripte in Linux angeht.

Also:
Ich will jede Minute ein SVN-Repository update (nicht comitten) (Befehl: svn update https://meinserver/meinrepopfad).

Nun habe ich keine Ahnung wie ich das Anstellen soll ...

der Script sollte .sh sein, oder?
Kann ich das Script selbst nur jede Minute aufrufen, oder muss das script die ganze Zeit rennen und z.B. in einer Schleife mit Sleep 59 (Sekunden) dies selbst tun?


Bin gespannt auf Vorschläge ;)

Greetz, Lousek
Mitglied: 8schpi
17.12.2008 um 16:40 Uhr
zuerst ein script.sh basteln, welches die aufgabe erfüllt. z.b.:
01.
#!/bin/sh 
02.
svn update https://meinserver/meinrepopfad
das also unter z.b. /home/ich/script.sh abspeicher und mit
01.
chmod 755 /home/ich/script.sh
ausführbar machen.

jetzt sollte man den minütlichen aufruf meiner meinung nach über cron realisieren:
http://de.wikipedia.org/wiki/Cron
z.b.
01.
* * * * * /home/ich/script.sh
Bitte warten ..
Mitglied: Alphavil
17.12.2008 um 17:01 Uhr
Würde sagen eher so:

01.
 */1 * * * * /home/ich/script.sh
Bitte warten ..
Mitglied: Lousek
17.12.2008 um 17:15 Uhr
Naja ... wo mus ich dies hinzufügen?

Greetz, Lousek

Edit: Habe so wie hier: http://www.selflinux.org/selflinux/html/cron01.html#d63e59 eine crontab-datei erstellt und den script eingetragen ... muss ich den daemon neustarten?

Edit2: Bei 1 * * * * * bringt er mir ein Fehler, bei * * * * * nicht .... ?
Bitte warten ..
Mitglied: datasearch
17.12.2008 um 17:33 Uhr
Du musst den crontab mit dem befehl crontab -e edieren. Um das Script jede Minute auszuführen, musst du die Zeile:

*/1 * * * * /pfad/zum/script.sh

eintragen. Dieser Eintrag hat folgende Bedeutung:

Pos1: Minute. (0-59)

Pos2: Stunde (0-23)

Pos3: Tag (1-31)

Pos4: Monat (1-12)

Pos5: Wochentag (mo-so, 0-7)

Pos6: Befehl

Du kannst auch in den Zeilen, wenn du zb. ALLE X Minuten, Tage oder Monate ein script ausführen möchtest, dies mit */X (Alle X Schritte) angeben. Im fall alle 5 Minuten währe das */5.

Schau aber bitte noch einmal in die Doku deines Cron-daemons. Mit "man crontab" sollten alle Informationen dazu erscheinen.
Bitte warten ..
Mitglied: Alphavil
17.12.2008 um 17:35 Uhr
Sorry natürlich ist es so wie datasearch geschrieben hat (*/1 * * * */.....) richtig
Bitte warten ..
Mitglied: Lousek
17.12.2008 um 20:57 Uhr
Naja ... mal rabiat zum testen:
*/1 * * * * reboot

Oder muss ich zum reboot irgend ein pfad angeben? (Welchen:P)?

Greetz, Lousek
Bitte warten ..
Mitglied: Lousek
17.12.2008 um 21:54 Uhr
Hi again

Also */1 * * * * "reboot" geht ohne probleme (... musste ihn im single-user modus starten um das wieder rauszubekommen :P) ... doch mein script will er nicht ausführen

Wenn ich ihn so aufrufe: /home/reload.sh geht es.
So macht er nichts: */1 * * * * /home/reload.sh
Und verschoben nach /scripts mit chmod 777: */1 * * * * /scripts/reload.sh --> passiert auch nichts.

Auch wenn ich den Befehl direkt schreibe, was auf der konsole auch geht, klappt nichts: */1 * * * * "svn update /var/www"

Jemand ne Idee ;)

Greetz, Lousek
Bitte warten ..
Mitglied: 8schpi
17.12.2008 um 22:27 Uhr
das könnte daran liegen, dass die shell, die man per hand startet, die standard pfade für programme kennt. die instanz die durch cron gestartet wird kennt diese nicht. nach dem programm svn wird dann glaube nur im aktuellen verzeichnis gesucht und da ist es nicht.

das kann man durch einen befehl (ich weiß ihn jetzt nicht auswendig, linux ist schon wieder länger her, arbeite momentan mit windows) oder aber in diesem fall besser noch durch die angabe des kompletten pfads umgehen.
01.
*/1 * * * * "/pfad/zum/svn update /var/www"
dann müsste es gehen.
Bitte warten ..
Mitglied: datasearch
18.12.2008 um 00:21 Uhr
Oder du kannst im Script auch die pfade absolut angeben.

Beispielscript:

01.
#!/bin/bash 
02.
 
03.
#zuerst einige Variabeln mit den erforderlichen Pfaden und Parametern 
04.
SNVPATH=/usr/bin/svn 
05.
SYNCPATH=/var/www 
06.
PARAMETER=update 
07.
LOGFILE=/var/log/svnsync.log 
08.
TOUCH=/bin/touch 
09.
 
10.
#Logfile vorhanden? Wenn nicht, anlegen. 
11.
if [ ! -f $LOGFILE ]; do $TOUCH $LOGFILE; fi 
12.
 
13.
#nun testen ob der Pfad zur binary vorhanden ist und das SVN-Dir existiert 
14.
# dann folgen einige Fehlercode-auswertungen um bei Problemen etwas zu tun. 
15.
if [[ -e $SVNPATH && -d $SYNCPATH ]]; do 
16.
  $SVNPATH $PARAMETER $SYNCPATH >> $LOGFILE 
17.
  if [ $? == 0 ]; do 
18.
   echo SVN war erfolgreich >> $LOGFILE 
19.
  else 
20.
   echo SVN war nicht erfolgreich >> $LOGFILE 
21.
  fi  
22.
 else 
23.
  echo $SVNPATH oder $SYNCPATH existiert nicht! >> $LOGFILE 
24.
fi
Das sollte auf jeden fall funktionieren. Selbst wenn du die Shell direkt vom kernel als init startest. Bitte noch einmal prüfen, habe jetzt keine Zeit das zu testen
Bitte warten ..
Mitglied: Lousek
18.12.2008 um 09:13 Uhr
Er bringt mir ein unexpected syntax-error bei:

if [ ! -f $LOGFILE ]; do $TOUCH $LOGFILE; fi

Greetz, Lousek
Bitte warten ..
Mitglied: Lousek
18.12.2008 um 10:07 Uhr
Hmm ... andere Frage:

Ich habe auf dem Debian dem root das anmelden verboten. Dafür habe ich einen User svnadmin.
Also mache ich mich mit sudo -s zum root ...
die crontab habe ich auch beim root editiert ... (also als ich root war habe ich crontab -e gemacht) ...
Kann es sein, das es irgendwas mit dem zu tun hat?

Werde das mal beim svnadmin reinschreiben ...

Was ich dann aber komisch finden würde, dass */1 * * * * "reboot" in der crontab vom root funktioniert hat ...

Greetz, Lousek
Bitte warten ..
Mitglied: datasearch
18.12.2008 um 10:46 Uhr
Sorry, mein Fehler. Habe die if-then mit der while-do Schleife verwechselt. ROFL. Ich habe das script eben getestet und nochmal etwas umgeschrieben. Solltest du so verwenden können.

01.
#!/bin/bash 
02.
 
03.
#zuerst einige Variabeln mit den erforderlichen Pfaden und Parametern 
04.
SVNPATH=/tmp/svn 
05.
SYNCPATH=/var/www 
06.
PARAMETER=update 
07.
LOGFILE=/var/log/svnsync.log 
08.
TOUCH=/bin/touch 
09.
 
10.
#Logfile vorhanden? Wenn nicht, anlegen. 
11.
if [ ! -f $LOGFILE ]; then 
12.
  $TOUCH $LOGFILE 
13.
  echo neue Logfile erstellt >> $LOGFILE 
14.
fi 
15.
 
16.
if [ ! -x $SVNPATH ]; then 
17.
 echo SVN wurde nicht unter $SVNPATH gefunden oder ist nicht ausfuehrbar >> $LOGFILE 
18.
 exit 101 
19.
fi 
20.
 
21.
#nun testen ob der Pfad zur binary vorhanden ist und das SVN-Dir existiert 
22.
# dann folgen einige Fehlercode-auswertungen um bei Problemen etwas zu tun. 
23.
if [ -d $SYNCPATH ]; then 
24.
  $SVNPATH $PARAMETER $SYNCPATH >> $LOGFILE 
25.
  if [ $? == 0 ]; then 
26.
   echo SVN war erfolgreich >> $LOGFILE 
27.
  else 
28.
   echo SVN war nicht erfolgreich >> $LOGFILE 
29.
   exit 103 
30.
  fi 
31.
 else 
32.
  echo $SYNCPATH existiert nicht! >> $LOGFILE 
33.
  exit 102 
34.
fi

Bitte oben noch die Pfade richtig setzen.
Bitte warten ..
Ähnliche Inhalte
Debian

Raspbian Jessie: Shellscript beim Herunterfahren ausführen

gelöst Frage von jiggiwowowDebian6 Kommentare

Hi, habe ein Raspberry Pi 2 mit Jessie am Laufen, das soll bestimmte Ordner per rsync auf einen angeschlossenen ...

VB for Applications

Shell-CMD Befehl Ausführen

gelöst Frage von Timo0oVB for Applications2 Kommentare

Nochmal ich^^ Ich möchte eine Aufgabe mit meinem VB Programm erstellen. Jedoch komme ich nicht weiter. Folgenden Code habe ...

Batch & Shell

Powershell Befehl in Batch ausführen

gelöst Frage von newit1Batch & Shell4 Kommentare

Hallo! Kann ich einen Powershell Befehl in eine Batch schreiben, damit diese bei Doppelklick den Befehl ausführt? Wie würde ...

Batch & Shell

Autoit: Befehl ausführen mit Anführungszeichen

gelöst Frage von adminstBatch & Shell1 Kommentar

Hallo zusammen Ich hoffe ihr könnt mir weiterhelfen. Der Befehl welcher ich ausführen muss ist folgender: c:\ProgramData\div\Citrix\CitrixReceiverEnterprise_3-4\CitrixReceiverEnterprise_3.4.201.exe ADDLOCAL="ICA_Client,PN_Agent" SERVER_LOCATION=" ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 2 TagenWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 2 TagenAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 3 TagenHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 3 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Router & Routing
Router auf Orginal Firmware zurück flashen mit Tftpd
Frage von ILeonardRouter & Routing21 Kommentare

Hallo, Ich habe zwei Router, einmal TP-Link 841n v11 und TP-Link 940N v5. Ich wollte fragen, ob jemand mir ...

Router & Routing
WRT keine Verbindung zum Web Interface
gelöst Frage von ILeonardRouter & Routing18 Kommentare

Hallo, Ich habe einen TP-Link WR841n mit wrt geflasht, das Problem ist ich kann mich mit 192.168.1.1 nicht verbinden. ...

Windows Server
Standortvernetzung zu einem Strato VServer (Windows)
Frage von matzefratze81Windows Server10 Kommentare

Moin, ich komme aus einem Enterprise-Umfeld und habe den Fehler gemacht, dass ich mich auf ein kleines Unternehmen eingelassen ...

TK-Netze & Geräte
Telefonie zweier Fritzboxen mit je eigenem DSL Anschluss verbinden
Frage von hannsgmaulwurfTK-Netze & Geräte10 Kommentare

Hallo zusammen, ich habe hier einen Haushalt mit zwei Anschlüssen. Einmal ISDN, einmal DSL. An jedem Anschluss hängt eine ...