Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Entwicklung Batch & Shell

Mitglied: Lousek

Lousek (Level 2) - Jetzt verbinden

17.12.2008, aktualisiert 18.12.2008, 9821 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Debian
gelöst Raspbian Jessie: Shellscript beim Herunterfahren ausführen (6)

Frage von jiggiwowow zum Thema Debian ...

Windows Server
WDS mit PXE Linux (3)

Frage von HansWurstAugust zum Thema Windows Server ...

JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Windows Server
gelöst Skript per GPO ausführen - Berechtigungen? (13)

Frage von honeybee zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...