Use ii to log IRC (for scripting purposes) _ _ | | | | ___ ___ | |_| | (_-< / -_) \___/ /__/ \___| _ _ (_) (_) | | | | |_| |_| _ | |_ ___ | _| / _ \ \__| \___/ _ | | ___ __ _ | | / _ \ / _` | |_| \___/ \__, | |___/ ___ ___ ___ |_ _| | _ \ / __| | | | / | (__ |___| |_|_\ \___| __ __ / / / _| ___ _ _ | | | _| / _ \ | '_| | | |_| \___/ |_| \_\ _ _ _ ___ __ _ _ (_) _ __ | |_ (_) _ _ __ _ (_-< / _| | '_| | | | '_ \ | _| | | | ' \ / _` | /__/ \__| |_| |_| | .__/ \__| |_| |_||_| \__, | |_| |___/ __ _ __ _ _ _ _ _ __ ___ ___ ___ ___ \ \ | '_ \ | || | | '_| | '_ \ / _ \ (_-< / -_) (_-< | | | .__/ \_,_| |_| | .__/ \___/ /__/ \___| /__/ | | |_| |_| /_/ ╔─*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──*──╗ ║1 ............................................... 1║ ║2* ............................................... *2║ ║3 ............................................... 3║ ║1 ..............Posted: 2025-09-29............... 1║ ║2* Tags: sysadmin linux archival irc bash scripts *2║ ║3 ............................................... 3║ ║1 ............................................... 1║ ╚───────────────────────────────────────────────────────╝ I wanted to show the user the latest irc message via gopher so... Install `ii`. # Tiny logger script ``` mkdir -p ~/.local/bin ``` then make file `~/.local/bin/ii-main-logger` ``` #!/bin/sh set -eu BASE="${II_DIR:-$HOME/irc}" SRV="${IRC_SERVER:-127.0.0.1}" # your IRCd is localhost PORT="${IRC_PORT:-6667}" # plaintext (no TLS wrapper needed) NICK="${IRC_NICK:-digestlog}" CHAN="${IRC_CHAN:-#main}" mkdir -p "$BASE" # start ii ii -s "$SRV" -p "$PORT" -n "$NICK" -i "$BASE" & pid=$! # wait for the input FIFO to appear, then join channel for i in $(seq 1 100); do [ -p "$BASE/$SRV/in" ] && break sleep 0.1 done printf 'JOIN %s\r\n' "$CHAN" > "$BASE/$SRV/in" # keep the process in the foreground so systemd can supervise it wait "$pid" ``` then ``` chmod +x ~/.local/bin/ii-main-logger ``` create systemd `~/.config/systemd/user/ii-logger.service` ``` [Unit] Description=ii logger for %E{IRC_CHAN:-#main} on %E{IRC_SERVER:-127.0.0.1} After=network.target [Service] Type=simple Environment=II_DIR=%h/irc Environment=IRC_SERVER=127.0.0.1 Environment=IRC_PORT=6667 Environment=IRC_NICK=digestlog Environment=IRC_CHAN=#main ExecStart=%h/.local/bin/ii-main-logger Restart=always RestartSec=5 [Install] WantedBy=default.target ``` then ``` systemctl --user daemon-reload systemctl --user enable --now ii-logger.service ``` sanity check: ``` ls -R ~/irc tail -n3 ~/irc/127.0.0.1/#main/out ``` change nick/channel later (systemctl --user edit ii-logger.service and override the Environment= lines, then): ``` systemctl --user daemon-reload systemctl --user restart ii-logger.service ``` Also, logrotate so doesn't keep track everything forever: ``` sudo tee /etc/logrotate.d/ii-logger >/dev/null <<'ROT' # Rotate ii channel logs under your home. Adjust the path if needed. # Keeps 14 compressed rotations; trims when file >256k or daily, whichever first. # copytruncate avoids needing to restart ii. /home/*/irc/*/#*/out { daily size 256k rotate 14 compress delaycompress copytruncate missingok notifempty } ROT # test it (dry run shows what would rotate) sudo logrotate -d /etc/logrotate.conf ```