Zum Cronjob-Problem hat m.scatello ja schon geschrieben: einfach ein Script unabhängig von den schon existierenden Dateien erstellen (den ersten Punkt im Folgenden beachten!)
In den Dateien createFolder.php und createUser.php steht soweit immer das gleiche drin.
Sehe ich das richtig? Der Teil zum prüfen der Verbindung ist in beiden Dateien identisch (bis auf den Dateinamen halt?). Wenn du Code durch kopieren von einer Datei in eine andere duplizieren musst, ist das ein deutlicher Hinweis darauf dass du den Code in eine Funktion/Klasse auslagern und die Methode/Funktion in beiden Dateien aufrufen möchtest.
":datum" => date('d.m.y'),
Das Datenbankdesign scheint mir defekt zu sein: das ist kein Datumsformat mit dem MySQL was anfangen kann. Der Parameter ist aber überflüssig, NOW() in den Query zu schreiben reicht (Voraussetzung ist natürlich ein korrekter Datentyp was bei dir nicht gegeben scheint).
$passwort = $_POST['passwort'];
Das umkopieren von Werten aus $_POST usw. war schon immer Unsinn, du kannst bei execute auch direkt die Werte aus $_POST verwenden. Speziell bei der Zeile erhebt sich allerdings noch die Frage: wo kommt $password_gehasht weiter unten dann auf einmal her?
$createFolder = ssh2_exec($connection, "mkdir " . escapeshellarg("/media/Files/" . htmlspecialchars(ucfirst($userData["nachname"])) . "/" . $pfad . "/" . $nameNeu));
Das htmlspecialchars hierdrin ist Käse, einen Kontextwechsel nach HTML gibt es hier nicht. Und wo kommt $userData auf einmal her? Und wo wird sichergestellt dass in $userData['nachname'] kein ../ steht?