Ich würde empfehlen, den Befehl wget in einer Subshell zu starten, damit Sie sicherstellen können, dass er abgeschlossen ist, bevor Sie Ihren mysql-Befehl ausführen. In bash geschieht dies mit Klammern.
Verwenden Sie auch &&
, damit der Befehl mysql nur ausgeführt wird, wenn der Befehl wget einen Erfolgsstatus hat.
#!/bin/sh
(
wget "http://domain/file.zip" && mysql -u user -ppassword database -e "UPDATE..."
) &
Setzen Sie das Passwort im Klartext in dem Skript ist not necessarily a good idea, weil es in einem ps
Eintrag angezeigt werden kann.
Stattdessen können Sie sich auf den [client]
Abschnitt in Ihrer ~/.my.cnf
Datei verlassen. Sie können auch die Umgebungsvariable MYSQL_PWD
verwenden. Jede dieser Lösungen bedeutet, dass in der Befehlsliste kein Kennwort angezeigt wird.
Beachten Sie auch, dass Bash das Ganze automatisch in eine Subshell legt, egal ob Sie {..} & oder (..) & – lhunath
verwenden. Das Problem besteht nicht darin, das Passwort in das Skript zu schreiben (das kann korrekt mit dem richtigen Befehl gesichert werden) Berechtigungen), es setzt das Passwort auf die Kommandozeile, damit jeder es sehen kann (wo jeder meint, jemand, der 'ps' ausführen kann oder einen anderen Weg findet, die Prozessliste abzufragen, zB durch Ausnutzen eines Fehlers auf dem Webserver). Nenne dieses wichtige Sicherheitsproblem stärker und du bekommst +1 von mir. – lhunath
@lhunath: Ja, guter Punkt über die PS-Auflistung. Obwohl ich von der Frage des OPs ausgehe, gehe ich nicht davon aus, dass auf diesem Rechner irgendein Webserver beteiligt ist. –