# FTP-Scan

# Neue Seite

<header id="bkmrk-ftp-dienst-technisch"># FTP-Dienst

Technische Dokumentation für die zentrale Verarbeitung, Validierung und Übertragung von PDF-Dokumenten mit jobbasierter Konfiguration, täglichem Cleanup und Logrotation.

</header><nav id="bkmrk-paketearchitekturins"><div class="wrap">[Pakete](#bkmrk-pakete-beide-archive-1)[Architektur](#bkmrk-1.-architektur-zentr)[Installation](#bkmrk-2.-installation-zip-)[Jobs](#bkmrk-3.-jobs-und-konfigur)[Cleanup](#bkmrk-4.-t%C3%A4gliches-cleanup)[Logrotate](#bkmrk-5.-logrotate-die-ins)[Betrieb](#bkmrk-6.-betrieb-und-fehle)[Docker](#bkmrk-7.-docker-perspektiv)</div></nav><main id="bkmrk-pakete-beide-archive"><section class="card" id="bkmrk-pakete-beide-archive-1">## Pakete

Beide Archive enthalten denselben Stand. Das ZIP-Archiv eignet sich besonders für den Transfer von Windows-Systemen, das TAR.GZ-Archiv für Linux.

[ZIP-Paket herunterladen](https://booky.spiegelblank.de/ftp-dienst-neu.zip) [TAR.GZ-Paket herunterladen](https://booky.spiegelblank.de/ftp-dienst-neu.tar.gz)</section><section id="bkmrk-1.-architektur-zentr">## 1. Architektur

### Zentrale Logik

Ein generischer Starter ruft die gemeinsame PDF-Verarbeitung auf. Es gibt keine individuellen Wrapper pro Job.

### Jobbasierte Konfiguration

Ein neuer Prozess benötigt nur eine neue Datei unter `jobs/<jobname>.conf`.

### Globale Werte

FTP-Zugang, SMTP, Logging und Standardwerte liegen zentral in `config/global.conf`.

```
/opt/ftp-dienst/
├── bin/
│   ├── run-job.sh
│   ├── process-pdf-upload.sh
│   └── cleanup.sh
├── config/
│   ├── global.conf
│   └── cleanup.conf
├── jobs/
│   ├── hoese-bankanhaenge.conf
│   ├── lobu-gehalt.conf
│   ├── lobu-personal.conf
│   ├── einkauf.conf
│   └── fibu-allgemein.conf
├── lib/
├── docs/
└── install.sh
```

</section><section id="bkmrk-2.-installation-zip-">## 2. Installation

### ZIP

```
unzip ftp-dienst-neu.zip
cd ftp-dienst-neu
bash install.sh
```

### TAR.GZ

```
tar -xzf ftp-dienst-neu.tar.gz
cd ftp-dienst-neu
bash install.sh
```

<div class="note">**Wichtig:** Das Installationsskript mit `bash install.sh` oder direkt als ausführbare Datei starten. Nicht mit `sh install.sh`, da die Skripte Bash-Funktionen wie `pipefail` verwenden.</div>Bestehende Dateien `global.conf` und `cleanup.conf` werden bei einer erneuten Installation nicht automatisch überschrieben.

</section><section id="bkmrk-3.-jobs-und-konfigur">## 3. Jobs und Konfiguration

### Globale Konfiguration

Datei: `/opt/ftp-dienst/config/global.conf`

```
# FTP
FTP_USER="idoms"
FTP_PASS="HIER_EINTRAGEN"
FTP_PASSIVE_MODE="on"

# SMTP
SMTP_SERVER="terminator.spiegelblank.de"
SMTP_PORT="587"
SMTP_USER="ftp_dienst@spiegelblank.de"
SMTP_PASS="HIER_EINTRAGEN"
EMAIL_FROM="ftp_dienst@spiegelblank.de"
EMAIL_NAME="FTP-Dienst der Spiegelblank"
EMAIL_TO="martin.raddei@spiegelblank.de"

# Logging
LOGFILE="/home/ftp/log/ftp_upload.log"
```

### Job-Konfiguration

Beispiel `jobs/lobu-gehalt.conf`:

```
JOB_NAME="lobu-gehalt"
FTP_HOST="10.10.99.24"
FTP_REMOTE_DIR="/gehalt#"
LOCAL_SOURCE_DIR="/home/ftp/lobu/gehalt/new"
ARCHIVE_DIR="/home/ftp/lobu/gehalt/cur"
ERROR_DIR="/home/ftp/lobu/gehalt/error"
CHECK_HOST_REACHABILITY="false"
```

### Aufruf

```
/opt/ftp-dienst/bin/run-job.sh hoese-bankanhaenge
/opt/ftp-dienst/bin/run-job.sh lobu-gehalt
/opt/ftp-dienst/bin/run-job.sh lobu-personal
```

### Dry-Run

```
/opt/ftp-dienst/bin/run-job.sh lobu-gehalt --dry-run
```

### Neuen Job ergänzen

```
cp /opt/ftp-dienst/jobs/lobu-gehalt.conf \
   /opt/ftp-dienst/jobs/neuer-job.conf
nano /opt/ftp-dienst/jobs/neuer-job.conf
/opt/ftp-dienst/bin/run-job.sh neuer-job --dry-run
```

</section><section id="bkmrk-4.-t%C3%A4gliches-cleanup">## 4. Tägliches Cleanup

Bei der Installation wird `/etc/cron.daily/ftp-dienst-cleanup` angelegt. Das Cleanup läuft damit einmal täglich.

`cleanup.sh` liest automatisch alle Job-Dateien unter `/opt/ftp-dienst/jobs/*.conf` und übernimmt daraus:

<table><tbody><tr><th>Variable</th><th>Zweck</th><th>Standardfrist</th></tr><tr><td>`LOCAL_SOURCE_DIR`</td><td>Eingangsverzeichnis</td><td>14 Tage</td></tr><tr><td>`ARCHIVE_DIR`</td><td>Erfolgreich verarbeitete Dateien</td><td>90 Tage</td></tr><tr><td>`ERROR_DIR`</td><td>Fehlerhafte Dateien</td><td>30 Tage</td></tr></tbody></table>

Zentrale Einstellungen in `config/cleanup.conf`:

```
CLEANUP_SOURCE_DAYS="14"
CLEANUP_ARCHIVE_DAYS="90"
CLEANUP_ERROR_DAYS="30"
DELETE_EMPTY_DIRS="false"
RUN_LOGROTATE="true"
```

Ein einzelner Job kann Fristen überschreiben:

```
CLEANUP_SOURCE_DAYS_JOB="7"
CLEANUP_ARCHIVE_DAYS_JOB="180"
CLEANUP_ERROR_DAYS_JOB="60"
```

### Testlauf

```
/opt/ftp-dienst/bin/cleanup.sh --dry-run
```

</section><section id="bkmrk-5.-logrotate-die-ins">## 5. Logrotate

Die Installation erzeugt `/etc/logrotate.d/ftp-dienst`. Benutzer und Gruppe werden aus der vorhandenen Logdatei beziehungsweise dem Logverzeichnis ermittelt und über die `su`-Direktive eingetragen.

```
/home/ftp/log/ftp_upload.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    dateext
    su root root
    create 0640 root root
}
```

Die konkreten Werte für Benutzer und Gruppe können vom Beispiel abweichen.

### Prüfung

```
logrotate -d /etc/logrotate.d/ftp-dienst
```

### Rotation erzwingen

```
logrotate -v -f /etc/logrotate.d/ftp-dienst
```

</section><section id="bkmrk-6.-betrieb-und-fehle">## 6. Betrieb und Fehlersuche

<table><tbody><tr><th>Prüfung</th><th>Befehl</th></tr><tr><td>Shell-Syntax</td><td>`bash -n /opt/ftp-dienst/bin/*.sh`</td></tr><tr><td>Job testen</td><td>`/opt/ftp-dienst/bin/run-job.sh JOBNAME --dry-run`</td></tr><tr><td>Cleanup testen</td><td>`/opt/ftp-dienst/bin/cleanup.sh --dry-run`</td></tr><tr><td>Logrotate prüfen</td><td>`logrotate -d /etc/logrotate.d/ftp-dienst`</td></tr><tr><td>Log beobachten</td><td>`tail -f /home/ftp/log/ftp_upload.log`</td></tr></tbody></table>

<div class="ok">**Sicherheit:** FTP- und SMTP-Passwörter nicht in Job-Dateien duplizieren. Die zentrale Konfiguration sollte nur für den ausführenden Dienstbenutzer und Administratoren lesbar sein.</div></section><section id="bkmrk-7.-docker-perspektiv">## 7. Docker-Perspektive

Der Dienst kann grundsätzlich containerisiert werden. Die Verzeichnisse unter `/home/ftp`, die globale Konfiguration und die Job-Dateien würden dabei als Volumes eingebunden.

Für einen Docker-Betrieb empfiehlt es sich, Logs nach `stdout`/`stderr` auszugeben und die Rotation über Docker zu steuern, statt `logrotate` im Container zu betreiben.

```
logging:
  driver: json-file
  options:
    max-size: 10m
    max-file: "14"
```

Ein fertiges Docker-Setup ist in den beigefügten Paketen noch nicht enthalten.

</section></main><footer id="bkmrk-ftp-dienst-%E2%80%93-technis">FTP-Dienst – technische Dokumentation · Stand 05.08.2026</footer>