Skip to content

Dateien, Konsole und Cron

SFTP

Der Tab Dateizugriff zeigt Host, Port und deinen Benutzernamen. Das Passwort wird einmal angezeigt, direkt nachdem du es gesetzt hast, und danach nie wieder.

FeldWert
Hostsftp.itsh.dev
Port2222
BenutzernameSteht im Tab, einer pro Website
AuthentifizierungNur Passwort

Port 2222, nicht 22. Die meisten Clients nehmen 22 als Standard, und auf diesem Host antwortet dieser Port mit einem anderen Dienst. Du bekommst also eine Hostkey-Warnung oder eine abgelehnte Anmeldung statt eines Timeouts. Wird dein Passwort abgelehnt und steht der Port noch auf 22, ist es ein Port-Problem und kein Passwort-Problem.

Jeder SFTP-Client funktioniert. FileZilla, Cyberduck und WinSCP sind die üblichen, und aus dem Terminal:

bash
sftp -P 2222 <dein-benutzername>@sftp.itsh.dev

Es gibt keine SSH-Keys und keine Shell

Der Zugang authentifiziert sich per Passwort. Es gibt keine Stelle, an der du einen Public Key hinterlegst, und ssh auf denselben Host bringt dir nichts: der Zugang hat keine Shell. Einzelne Befehle laufen über die Konsole weiter unten.

Setz oder ersetz das Passwort mit Passwort zurücksetzen im selben Tab. Es warnt vorher:

text
Aktuelle SFTP-Sitzungen werden beendet. Fortfahren?

Ein langer Upload kann abbrechen, ohne dass du etwas getan hast

Der SFTP-Endpunkt startet neu, sobald sich Zugangsdaten ändern. Das dauert ein paar Sekunden und trennt Verbindungen, die in diesem Moment offen sind. Dein eigenes Zurücksetzen ist eine Ursache, aber nicht die einzige. Ein Upload über mehrere Gigabyte kann also mittendrin sterben, ohne dass du den Grund siehst.

Nimm einen Client, der fortsetzt statt neu anzufangen, und prüf, ob der Upload wirklich durchgelaufen ist.

Wo deine Dateien landen

Nach dem Verbinden stehst du ganz oben in deinem eigenen Bereich. Darin:

text
site/
  public_html/      <- alles hier wird im Web ausgeliefert

Nur public_html wird ausgeliefert. Eine Datei daneben, nicht darin, bleibt erhalten und ist für deinen Code lesbar. Genau dorthin gehören Konfiguration, Bibliotheken und alles andere, was nicht herunterladbar sein darf.

Eine leere Website liefert eine Platzhalterseite mit dem Text Your site is ready aus. Die zu sehen heißt, dass die Website funktioniert und das Document Root leer ist, nicht dass etwas schiefgegangen ist.

Manche Pfade erreichen deine Dateien nie

/healthz ist auf jeder Website reserviert und antwortet immer mit ok. Jeder Pfad, der mit einem Punkt beginnt, etwa /.env oder /.git/config, wird unter nginx mit 403 abgelehnt.

Konsole

Der Tab Konsole führt einen einzelnen Befehl gegen deine Website aus und streamt die Ausgabe zurück. Es ist keine Shell-Sitzung: jeder Lauf ist eigenständig, zwischen den Läufen wird nichts gemerkt, und es gibt kein Arbeitsverzeichnis, das bestehen bleibt.

bash
composer install --no-dev
wp core update
php artisan migrate

Ein Auswahlfeld bietet fertige Befehle für WordPress, Laravel, Flarum, Drupal und Composer an.

Verfügbar: php, composer, wp (WP-CLI), git, unzip, bash. Alles, was dein Projekt selbst unter vendor/bin installiert, funktioniert ebenfalls. Die PHP-Extensions sind dieselben, mit denen die Website läuft.

GrenzeWert
Gleichzeitige Befehle pro Website1
Länge des Befehls4096 Zeichen
Laufzeit10 Minuten, dann wird der Befehl beendet
Ausgabe aufbewahrtEtwa 1 Stunde

Startest du einen zweiten Befehl, während einer läuft, bekommst du:

text
a command is already running for this site

Warte entweder ab oder nutz Stoppen.

Befehle laufen in /app/public_html, also derselben Stelle wie public_html über SFTP. Setz Arbeitsverzeichnis, um darunter zu arbeiten. Etwas anderes nimmt das Feld nicht:

text
invalid working directory: working_dir must be /app/public_html or a subdirectory

Die Konsole läuft neben deiner Website, nicht in ihr

Jeder Befehl bekommt einen eigenen kurzlebigen Container mit deinen Dateien und deinen Datenbank-Zugangsdaten. Deine Website liefert währenddessen weiter aus, und ein abstürzender Befehl reißt sie nicht mit. Umgekehrt kann ein Befehl deine Website nicht neu starten: dafür gibt es Website neu starten unter Aktionen.

Die Datenbank-Zugangsdaten stehen in der Umgebung, du musst sie also nicht eintippen:

bash
php -r 'echo getenv("DB_NAME"), PHP_EOL;'

Cron

Der Tab Cron plant wiederkehrende Befehle. Gleiche Umgebung wie die Konsole, gleiche Dateien, gleiche Werkzeuge.

Zeitpläne haben fünf Felder und laufen in UTC

text
Minute Stunde Tag-im-Monat Monat Wochentag

*/15 * * * * und 30 4 * * 1 gehen. Alles andere nicht:

  • Kein Sekundenfeld. Ausdrücke mit sechs Feldern werden abgelehnt.
  • Keine Kurzform. @daily, @hourly und der Rest werden abgelehnt.
  • Immer UTC. 0 3 * * * läuft um 03:00 UTC, also je nach Jahreszeit um 04:00 oder 05:00 in Deutschland. Die PHP-Zeitzone der Website ändert daran nichts.

Ein Zeitplan, den der Parser nicht lesen kann, wird beim Speichern abgelehnt:

text
Ungültiger Zeitplan

Grenzen

GrenzeWert
Cron-Jobs pro Website5
Cron-Jobs pro Konto30
Zeitlimit300 Sekunden als Standard, 10 bis 3600 erlaubt
Laufhistorie3 erfolgreiche und 3 fehlgeschlagene Läufe, 24 Stunden aufbewahrt
text
Maximal 5 Cron-Jobs pro Website.
Maximal 30 Cron-Jobs pro Konto erreicht.

Der Name ist ein kurzer Slug und lässt sich nach dem Anlegen nicht mehr ändern:

text
Name muss mit einem Kleinbuchstaben beginnen und darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten (max. 31 Zeichen).

Was bei einem Lauf passiert

Jeder Lauf erscheint unter Läufe mit seinem Exit-Code, und Ausgabe zeigt, was er ausgegeben hat. Verschickt wird nichts.

  • Ein fehlgeschlagener Lauf wird nicht wiederholt. Der nächste geplante Lauf ist die Wiederholung, ein täglicher Job verliert damit einen Tag.
  • Überlappende Läufe werden standardmäßig übersprungen. Mit dem Standard Forbid wird ein Lauf, der startet, während der vorige noch läuft, verworfen und nicht eingereiht. Allow lässt sie überlappen, Replace beendet den vorigen.
  • Ein verpasstes Zeitfenster wird nicht nachgeholt. Konnte innerhalb von 30 Sekunden nach dem geplanten Zeitpunkt nichts starten, entfällt dieser Lauf.
  • Ausgaben verschwinden nach 24 Stunden. Was du behalten willst, schreib in eine Datei in deinem eigenen Verzeichnis.

Weiter