У оболонці GNOME тече пам’ять, псуючи враження від користування. Наприклад, може заморозити ноутбук постійним підкачуванням. Щоб протистояти, нам доводилося виявляти цю ситуацію, перемикатися до віртуального терміналу, заходити в систему і убивати схиблений процес. На щастя, перезапускання gnome-shell майже непомітне і безпечне. Щойно я збагнув, що нагляд над оболонкою можна легко автоматизувати.

Спочатку ми створюємо дію ~/bin/check-gnome-shell.sh:

#!/bin/bash

# Убити будь-який процес gnome-shell, який займає більше, ніж 300 Mb пам’яті
ps -A --sort -rss -o comm,pid,rss | grep '^gnome-shell\s' | awk '{print $2, $3}' | \
    while read -r pid rss; do
        [[ "$rss" -gt 300000 ]] && kill -KILL $pid || true
    done

Потім ми створюємо однозарядну користувацьку службу ~/.config/systemd/user/check-gnome-shell.service:

[Unit]
Description=Check whether gnome-shell doesn't leak memory

[Service]
Type=oneshot
ExecStart=/bin/bash /home/sakhnik/bin/check-gnome-shell.sh

Потім таймер ~/.config/systemd/user/check-gnome-shell.timer:

[Unit]
Description=Check whether gnome-shell is leaking memory

[Timer]
OnCalendar=*:0/5

[Install]
WantedBy=timers.target

І нарешті ми активуємо і запускаємо таймер:

systemctl --user enable check-gnome-shell.timer
systemctl --user start check-gnome-shell.timer

Це все. Щоп’ять хвилин виконується дія. Вона перевіряє зайняту пам’ять процесів gnome-shell і вбиває тих, що перебирають 300M.