Befehle nacheinander abarbeiten
-
Hallo Zusammen,
ich bin ein NEuling bezüglich Linux. Ich habe es geschaft einige Sachen zu installieren und möchte den Vorgang gern automatisieren. Hierfür würde ich gern einige Befehle hintereinander ausführen lassen. Wie geht das mit der .sh???
Zum installieren von einem Webserver:
apt-get update apt-get install openjdk-6-jre apt-get install -y libapache2-mod-php5 php5-cli php5-common php5-cgi apt-get install -y mysql-server php5-mysql /etc/init.d/apache2 restart apt-get install phpmyadmin echo Include /etc/phpmyadmin/apache.conf >> /etc/apache2/apache2.conf /etc/init.d/apache2 restart /etc/init.d/mysql restart
und dann habe ich einige PHP Dateien(sorry ich kann c/c++ noch nicht), die ich in einem screen laufen lassen möchte:
screen -S test1 php /var/www/test1.php screen -S test2 php /var/www/test2.php screen -S test3 php /var/www/test3.php ...
super wäre das in einem crontab:
*/2 * * * * screen -S test1 -X php /var/www/test1.php */2 * * * * screen -S test2 -X php /var/www/test2.php */2 * * * * screen -S test3 -X php /var/www/test3.php
(wäre das so richtig???)
THX
Dennis
-
Mach 'ne einfache Textdatei. In die erste Zeile kommt
#!/bin/sh
, danach deine Befehle. Die Textdatei ausführbar machen (chmod +x), feddich.
Die cron-Einträge sehen auch gut aus. Aber warum willst Du alle paar Sekunden 'nen screen starten???
-
In der sh kannst du mit Semikolon Befehle hintereindander ketten. Mit && erreichst du etwas ähnliches, dann werden die nachfolgenden Befehle aber nur ausgeführt, wenn der vorhergehende keinen Fehlercode zurück geliefert hat.
-
SG1 schrieb:
Aber warum willst Du alle paar Sekunden 'nen screen starten???
Hi - ich will das PHP Script 8x laufen lassen, es holt sich von meinen V-Servern dann Statistiken im XML formart ab. Habe es leider nicht besser hin bekommen.
-
die laufen ja auch ohne screens
-
Klingt nach einem guten Anwendungsfall für Chef. Wenn du viel in die Richtung machst, schau dir das mal an, damit kannst du derartige Aufgaben sehr schön automatisieren. Wenn das nur eine einmalige Sache ist, zahlt sich das aber natürlich nicht aus, dafür ist Chef hoffnungslos überdimensioniert.
Deine Crontab startet alle zwei Minuten screen und führt dann in der Screen-Session dein PHP-Skript aus. Klingt nicht so sinnvoll für mich. Screen brauchst du dafür eigentlich nicht.
Einfach nur sowas in der Art:
MAILTO=deine@mailadresse.example.org */2 * * * * $HOME/bin/deinphpskript.php
Wobei
deinphpskript.php
natürlich ausführbar sein sollte.edit: Crontab, nicht PHP-Skript.
-
Ach ja, vielleicht interessiert dich auch die Umgebungsvariable DEBIAN_FRONTEND, die lässt sich nämlich auf "noninteractive" setzen, was zusammen mit Preseeding sehr spannend für diese lästigen interaktiven Debconf-Selections ist.
Und um Crontabs per Shellskript zu bearbeiten, lässt man sie sich typischerweise rausschreiben, ergänzt sie dann und liest sie dann wieder frisch ein.
So ungefähr:
crontab -l > meinecrontab.out echo $DEINCRONJOB >> meinecrontab.out crontab meinecrontab.out
edit: Ist so naiv natürlich fehleranfällig bei mehreren gleichzeitig laufenden Skripten.
-
verdammt - ich glaube ich muss das wirklich besser machen - hat jemand Lust und braucht Geld?
<?php $MySQL_Host="localhost"; //Server $MySQL_User="root"; //User $MySQL_Passw="123"; //Passwort $db="xml_import"; //Datenbank if (! @$link=mysql_connect("$MySQL_Host","$MySQL_User","$MySQL_Passw")){ echo "Die Verbindung zu ",$MySQL_Host," konnte nicht hergestellt werden<br>"; exit; } mysql_select_db($db,$link); //Datenabrufen $thread = "1"; //Abfrage0 $abfrage0 = @mysql_query ("SELECT * FROM hosts WHERE status = 1 AND thread_id ='".$thread."'" ,$link); //Wenn NULL, dann hole host aus Main DB if (@mysql_num_rows ($abfrage0) == "0"){ //mysql_query ("", $link); echo "Keine Hosts mehr\n"; } while ($daten0 = @mysql_fetch_array($abfrage0)){ mysql_query ("INSERT INTO urls (host_id,path,status) VALUES ('".@$daten0[id]."','/','0');", $link); //Abfrage1 $abfrage1 = @mysql_query ("SELECT * FROM urls WHERE host_id = ".@$daten0[id]." AND status = '0'",$link); if (@mysql_num_rows ($abfrage1) == "0"){ //mysql_query ("Update hosts SET status = '3' Where id = '".$daten0['id']."';", $link); echo $daten0['host']." ist fertig\n"; } while ($daten1 = @mysql_fetch_array($abfrage1)){ set_time_limit (60); $xmlurl = "http://localhost/xml_export.php?url=http://".$daten0['host'].$daten1['path']; $xml = simplexml_load_string(file_get_contents($xmlurl)); $hosts = explode(".*|",$xml->filter); $hosts = str_replace(".*", "", $hosts); $hosts = array_unique($hosts); foreach ($hosts as $host){ $host_teile = parse_url($host); $host_teile['host'] = str_replace("www1.", "www.", @$host_teile['host']); $host_teile['host'] = str_replace("www2.", "www.", @$host_teile['host']); $host_teile['host'] = str_replace("www3.", "www.", @$host_teile['host']); $host= str_replace("www.", "", $daten0['host']); if (strpos(@$host_teile['host'], ".".$host) !== false){ mysql_query ("INSERT INTO hosts (host,status,thread_id) VALUES ('".@$host_teile['host']."','1','".$thread."');", $link); }else{ mysql_query ("INSERT INTO hosts (host) VALUES ('".@$host_teile['host']."');", $link); } } $count_intern = 0; $count= 0; $urls = explode(";",$xml->sitelist); $urls = str_replace(";", "", $urls); $urls = array_unique($urls); foreach ($urls as $url){ $url_teile = parse_url($url); if (strpos(@$url_teile['host'], @$daten0['host']) !== false){ $count_intern++; mysql_query ("INSERT INTO urls (host_id,path) VALUES ('".@$daten0['id']."','".@$url_teile['path']."');", $link); } $count++; } $count_extern = $count - $count_intern; mysql_query ("Update urls SET status = '1' Where id = '".$daten1['id']."';", $link); } //While 1 } //While 0 ?>
mir das als Programm zu schreiben, so dass es stabil läuft und mir die daten abruft.
-
DHO schrieb:
ich glaube ich muss das wirklich besser machen - hat jemand Lust und braucht Geld?
Wenn du das mit Geld wirklich ernst meinst, dann mach bitte einfach einen neuen Thread im Projekte-Forum auf und beschreib dort genau, was du haben möchtest. Dann können interessierte User dir sagen, was dich das kosten würde.
Aber ehrlich gesagt habe ich das Gefühl, dass du dich nicht auf eine Aufgabe konzentrierst, sondern an drei Fronten gleichzeitig wild herumbastelst. Wenn du eine Aufgabe nach der anderen abarbeitest, bekommst du das vmtl. auch alleine hin.