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
```