# tmux - crontab

## Default‑Shell schnell auf `/bin/bash` festlegen

Oft bleibt eine neue `tmux`‑Session schwarz, wenn keine gültige Standard‑Shell definiert ist. Mit der folgenden Ein‑Zeiler‑ oder Schritt‑für‑Schritt‑Anleitung schreibst du den notwendigen Eintrag in `~/.tmux.conf`.

### Ein‑Zeiler (sofort ausführen)

```bash
echo 'set-option -g default-shell /bin/bash' >> ~/.tmux.conf
```

```bash
echo 'set-option -g default-shell /bin/bash' >> ~/.tmux.conf
mkdir manual
echo -e 'apt-get update\napt-get full-upgrade -y\n/sbin/reboot now' >> manual/update_and_reboot.sh
echo -e 'apt-get update\napt-get full-upgrade -y' >> manual/just_update.sh
```

**Hinweis:** `/bin/bash` ist auf fast allen Linux‑Systemen vorhanden. Wer plattformunabhängig arbeiten möchte, setzt lieber `/usr/bin/env bash`.

### Schritt‑für‑Schritt‑Variante

1. **Datei öffnen:**  
    `nano ~/.tmux.conf`
2. **Zeile hinzufügen – ganz egal, wo:**  
    `set-option -g default-shell /bin/bash`
3. **Speichern &amp; schließen:**  
    <kbd>Ctrl</kbd>+<kbd>O</kbd>, <kbd>Enter</kbd>, <kbd>Ctrl</kbd>+<kbd>X</kbd>
4. **tmux‑Konfiguration neu laden (ohne Neustart):**  
    `tmux source-file ~/.tmux.conf`

---

# tmux hängt im toten Netzlaufwerk – Notfall‑Cheatsheet

Wenn dein `tmux`‑Fenster in einem Pfad steht, der auf einem abgestürzten NFS‑/CIFS‑Mount liegt, wirkt das Terminal wie eingefroren: jeder I/O‑Aufruf wartet ewig auf eine Antwort, die nie kommt. Diese Anleitung zeigt dir, wie du die blockierte Shell verlässt, die Pane reparierst – oder den kaputten Mount brutal löst – ohne deine ganze tmux‑Sitzung zu verlieren.

---

## 1 · Schnelle Hilfe direkt in `tmux`

<table id="bkmrk-aktion-tastenfolge-%28"><thead><tr><th>Aktion</th><th>Tastenfolge <small>(Prefix = <kbd>Ctrl</kbd>+<kbd>b</kbd>)</small></th><th>Ergebnis</th></tr></thead><tbody><tr><td>Neues Window</td><td><kbd>Ctrl</kbd>+<kbd>b</kbd> <kbd>c</kbd></td><td>Frische Login‑Shell in `$HOME` oder `/`.</td></tr><tr><td>Neue Pane (horizontal)</td><td><kbd>Ctrl</kbd>+<kbd>b</kbd> <kbd>"</kbd></td><td>Zweite Shell, unabhängig vom blockierten Verzeichnis.</td></tr><tr><td>Hängende Pane killen</td><td><kbd>Ctrl</kbd>+<kbd>b</kbd> <kbd>x</kbd> → <kbd>y</kbd></td><td>Nur die kaputte Pane wird beendet.</td></tr><tr><td>Pane neu starten</td><td><kbd>Ctrl</kbd>+<kbd>b</kbd> <kbd>:</kbd> → `respawn-pane -k`</td><td>Kills + sofortiger Neustart der Shell darin.</td></tr><tr><td>Ganzes Window killen</td><td><kbd>Ctrl</kbd>+<kbd>b</kbd> <kbd>&amp;</kbd> → <kbd>y</kbd></td><td>Alle Panes dieses Fensters schließen.</td></tr></tbody></table>

**Tipp:** Meist reicht es, <kbd>Ctrl</kbd>+<kbd>b</kbd> <kbd>c</kbd> zu drücken, sich in der neuen Shell per `pwd` den aktuellen Pfad anzeigen zu lassen und anschließend den defekten Mount zu lösen (→ Abschnitt 3).

---

## 2 · Fest­hängende Prozesse gezielt töten

```bash
# 1 · TTY der Pane herausfinden
who         # Spalte "PTS" merken (z. B. pts/4)

# 2 · laufende Prozesse auf diesem TTY zeigen
ps -o pid,stat,cmd -t pts/4

# 3 · sanft beenden (SIGTERM), notfalls hart (SIGKILL)
kill <PID>          # SIGTERM
kill -9 <PID>       # SIGKILL
```

Sobald der blockierende Prozess endet, reagiert die Shell sofort wieder.

---

## 3 · Abgestürzten Netz‑Mount „faul“ abhängen

```bash
sudo umount -l -f /pfad/zum/netzlaufwerk
```

- `-l` (*lazy*) entfernt den Mount sofort aus dem Namensraum, selbst wenn noch offene Handles existieren.
- `-f` (*force*) erzwingt das Umounten auch bei NFS‑Server‑Timeout.

Danach funktionieren alle Befehle wieder, die nicht nochmals auf dieses Verzeichnis zugreifen.

---

## 4 · Letzter Ausweg – komplette Session schließen

```bash
# innerhalb von tmux
Ctrl-b d             # detach
# auf der Login-Shell
tmux kill-session -t <sessionname>
```

Das beendet alles in einem Rutsch. Nützlich, wenn mehrere Windows abhängig sind oder sich die Lage anders nicht bereinigen lässt.

---

## 5 · Dauerhafte Prävention

- **Automount** (systemd.automount / autofs) einsetzen, damit inaktive NFS/CIFS‑Mounts nach Timeout verschwinden.
- **Shell‑Prompt optimieren:** Entferne jede `$PWD`-Auflösung in `PROMPT_COMMAND`, wenn du häufig in Netz­pfaden arbeitest.
- **Watchdog‑Cronjob:** Skript, das hängende Mounts erkennt und `umount -l -f` ausführt.

---

## 6 · „Neue tmux‑Session bleibt leer“ – Konfiguration fixen

Manche Distributionen starten `tmux` ohne explizite Login‑Shell. Ist die voreingestellte Shell nicht ausführbar (z. B. durch einen defekten Symlink oder ein fehlendes Home‑Verzeichnis), erscheint nur ein schwarzer Bildschirm. Setze deshalb eine valide Standard‑Shell in deiner `~/.tmux.conf`:

```bash
nano ~/.tmux.conf
```

```bash
# ------------------------------
# Saubere Login‑Shell erzwingen:
set-option -g default-shell /usr/bin/env bash
# Optional: gleich als Login‑Shell starten
set-option -g default-command "bash -l"
# ------------------------------
```

**Verbesserung gegenüber deinem ursprünglichen Trick:** `/usr/bin/env bash` findet `bash` auch dann, wenn sie nicht unter `/bin` liegt, und funktioniert daher auf nahezu allen Linux‑Varianten (inkl. macOS / BSD). Mit `default-command "bash -l"` bekommst du zusätzlich ein vollwertiges Login‑Environment (u. a. `/etc/profile` wird geladen).

---

## 7 · Kurzanleitung für die Hosentasche

```
# Pane hängt im toten Mount?
Ctrl-b c                # neues Window
sudo umount -l -f …     # Mount loswerden
Ctrl-b x                # alte Pane killen

```

Fertig! Deine tmux‑Sitzung lebt weiter, und du sparst dir den Logout.