Espanso je dost nepostradatelná pomůcka a nechce se mi ho měnit, ale má problém. Už dlouho a známý. V paměti prostě jenom bobtná. Jak to tedy řešit?
Memory leak on Mac #1675 je chyba neopravená od září 2023, byť to aktuálně (v létě 2026) vypadá, že snad v dev branchi řešení už je.
Espanso umožňuje vyvoolat “espanso restart”, takže to může prostě udělat v okamžiku, kdy zjistíte, že požírá kupu paměti.
Nebo, to nejsnazší řešení je:
crontab -e
a přidat tam (11 je 11:00 dopoledne, takže si tam klidně dejte hodinu kdy nepracujete)
0 11 * * * espanso restart >/dev/null 2>&1
A nezapomeňte, crontab -e se ukončuje “:wg”.
TIP: Espanso coby náhrada AutoHotKey (AHK) a proč je to nejlepší text-expander pro Mac, Windows i Linux
Případně můžete ještě pokročilejší, tedy nechat hlídat kolik paměti má, pokud jí má nadměrně, tak teprve poté restartovat.
Tedy např něco jako espanso-mem-watch.sh:
#!/bin/zsh
LIMIT_MB=800
ESPANSO=“/Applications/espanso/Espanso.app/Contents/MacOS/espanso“
APP=“/Applications/espanso/Espanso.app“
LOG=“/tmp/espanso-watchdog.log“
pids=(${(f)“$(/usr/bin/pgrep -if ‚[e]spanso‘)“})
if (( ${#pids} == 0 )); then
echo „$(date ‚+%F %T‘) Espanso not running“ >> „$LOG“
exit 0
fi
top_args=()
for p in „${pids[@]}“; do
top_args+=(-pid „$p“)
done
mem_mb=$(
/usr/bin/top -l 1 „${top_args[@]}“ -stats pid,command,rsize 2>/dev/null |
/usr/bin/awk ‚
/^[[:space:]]*[0-9]+[[:space:]]+espanso[[:space:]]/ {
m=$3
gsub(/\+/, „“, m)
unit=substr(m, length(m), 1)
val=substr(m, 1, length(m)-1) + 0
if (unit == „G“) val *= 1024
else if (unit == „M“) val = val
else if (unit == „K“) val /= 1024
sum += val
}
END { printf „%.0f\n“, sum }
‚
)
[[ -z „$mem_mb“ ]] && mem_mb=0
echo „$(date ‚+%F %T‘) Espanso top MEM: ${mem_mb} MB“ >> „$LOG“
if (( mem_mb > LIMIT_MB )); then
echo „$(date ‚+%F %T‘) Restarting Espanso, over ${LIMIT_MB} MB“ >> „$LOG“
„$ESPANSO“ restart >> „$LOG“ 2>&1 || {
echo „$(date ‚+%F %T‘) espanso restart failed, killing/opening app“ >> „$LOG“
/usr/bin/pkill -if ‚[e]spanso‘
/usr/bin/open „$APP“
}
fi
Nezapomenout ho označit pomocí “chmod +x ~/bin/espanso-mem-watch.sh”. a
A pouštět můžete přes cron stejně jako předchozí.
Kde můžete použít i jednodušší variantu skriptu než ten velký předchozí a dát to prostě do crontab:
limit=800; pids=(${(f)“$(/usr/bin/pgrep -if ‚[e]spanso‘)“}); (( ${#pids} == 0 )) && exit 0; args=(); for p in „${pids[@]}“; do args+=(-pid „$p“); done; mem=$(/usr/bin/top -l 1 „${args[@]}“ -stats pid,command,rsize 2>/dev/null | /usr/bin/awk ‚/^[[:space:]]*[0-9]+[[:space:]]+espanso[[:space:]]/ {m=$3; gsub(/\+/, „“, m); u=substr(m,length(m),1); v=substr(m,1,length(m)-1)+0; if(u==“G“) v*=1024; else if(u==“K“) v/=1024; sum+=v} END {printf „%.0f\n“, sum}‘); echo „Espanso top MEM: ${mem:-0} MB“; (( ${mem:-0} > limit )) && /Applications/espanso/Espanso.app/Contents/MacOS/espanso restart
Případně si jen pomoci “which espanso” ověřte kde to vaše je a změňte ono spouštění na konci.
