ç£èŠã¹ã¯ãªããã« root ã1ã³ãã³ãã ãæž¡ã â visudoã§å£ããªãsudoersèšèš
ååããå€å
Chromeãã ããèŠåããŠåãè©±ãæžããŸãããä»åã¯ãã®é£ã®ç£èŠã¹ã¯ãªãããmem-hog-guard.shãæ€ç¥ã¯ã§ããã®ã«killããæš©éããªããŠéç¥æ¢ãŸãã ã£ã話ãšããã®æš©éããå£ãããè©°ãã圢ã§ã¯ãªãæ€èšŒèŸŒã¿ã§æž¡ããèšèšã®è©±ã§ãã
å°ãããšïŒæ€ç¥ã¯ã§ããã®ã«æãåºããªã
mem-hog-guard.shã®åé ã³ã¡ã³ãã«ãäºã®çºç«¯ãæžããŠãããŸãã
# ãªãèŠããïŒ2026-08-09ïŒ:
# macOSã® dasd(Duet Activity Scheduler) ã RSS 264MB ã®ãŸãŸ MEM 47GB / CMPRS 46GB ã
# æ±ããswapã37GBãŸã§æŒãäžã㊠Chrome ã® launchPersistentContext ã180ç§ã§
# ã¿ã€ã ã¢ãŠã -> SNSå
šã¬ãŒã³ã1æ¥åãŸãããš0ä»¶ã§å€±æããã皌å21æéã§çºçã
# RSSäžäœç£èŠã«ã¯äžåºŠãæ ããªããããèª°ãæ°ã¥ããªãã£ãã
dasdã¯macOSã®æšæºããŒã¢ã³ã§ãæ¬æ¥ã¯èœã¡ãŠãlaunchdãå³åº§ã«åèµ·åããŠãããå®å
šãªå¯Ÿè±¡ã§ããã ããæ€ç¥ããžãã¯ã¯AUTO_RESTART_NAMES="dasd" / AUTO_RESTART_THRESHOLD_MB=5120ïŒ5GBïŒãšããŠã¡ãããšçµãã§ãããŸãããåé¡ã¯ãæ€ç¥ããåŸã®äžæã§ããã
if in_list "$command" "$AUTO_RESTART_NAMES" && [ "$mem_mb" -ge "$AUTO_RESTART_THRESHOLD_MB" ] && ! cooldown_active "$command"; then
...
else
# dasd çã¯rootææãNOPASSWDã«ãŒã«ãç¡ãç°å¢ã§ã¯ -n ã倱æããã®ã§éç¥ã«èœãšãã
cooldown_mark "$command"
if sudo -n /usr/bin/killall "$command" 2>/dev/null; then
log "restarted $command pid=$pid mem=$mem cmprs=$cmprs"
findings="${findings}â
${msg}"$'\n'
restarted=$((restarted + 1))
else
log "restart-failed(no-sudo) $command pid=$pid mem=$mem"
findings="${findings}â ïž ${msg} â sudoæš©éãç¡ãåèµ·åã§ãããæå: sudo killall ${command}"$'\n'
fi
fi
dasdã¯rootææãªã®ã§ãsudo -nïŒãã¹ã¯ãŒãå
¥åãªãã®sudoïŒã§ããç¡äººãžã§ãããã¯æ®ºããŸãããNOPASSWDã«ãŒã«ãèšå®ããŠããªãã£ãã®ã§sudo -nã¯æ¯å倱æãããã°ã«ã¯restart-failed(no-sudo)ãç©ã¿äžãããéç¥ã«ã¯ãâ ïž æå: sudo killall dasdããå»¶ã
ãšåºç¶ããã ãã§ããã
ããã«å°å³ã«å¹ããŠããã®ããcooldown_mark "$command"ãsudoã®æåŠã確èªããåã«åŒã°ããŠããç¹ã§ããã€ãŸãNOPASSWDãç¡ãéã¯ãæ€ç¥ããŠå€±æãããã³ã«30åïŒCOOLDOWN_SEC=1800ïŒã®ã¯ãŒã«ããŠã³ã ãããã£ã¡ãç«ã¡ãdasdããã®ãŸãŸããã«èšããã§ã次ã®å·¡åã§ã¯é»ã£ãŠåæ€ç¥ãã¹ãããããŠããŸãããæ€ç¥ããžãã¯ã¯æ£ããã®ã«ãå®è¡åããªãããã§ãéãã«èŠéãç¶ãããç¶æ
ã«èœã¡ãŠããããã§ãã
èšèšïŒ3段æ§ãã§æå°ã¹ã³ãŒãã®rootã ãæž¡ã
ãããçŽãã®ãenable-dasd-autorestart.shã§ããåã«visudoã§NOPASSWDãè¶³ãã ãã§ãåããŸãããããã ãšãæã¡ééãããsudoèªäœãæ»ã¬ããå
¥ããã€ãããå®ã¯å¹ããŠããªããã®2ã€ã®äºæ
ãèžã¿ãŸãããªã®ã§ãã®ã¹ã¯ãªããã¯3段æ§ãã«ããŠãããŸãã
1. æž¡ãã«ãŒã«ãã³ãã³ã1æ¬ã»åŒæ°ãŸã§åºå®ãã
RULE='matsubara ALL=(root) NOPASSWD: /usr/bin/killall dasd'
NOPASSWD: /usr/bin/killallã§ã¯ãªãã/usr/bin/killall dasdãŸã§æžããŠããŸããsudoersã¯ã³ãã³ãè¡ãåŒæ°ãŸã§å«ããŠç
§åããã®ã§ããã®1è¡ãèš±å¯ããã®ã¯æåéããdasdãšããååã®ããã»ã¹ãkillallããããšãã ãã§ããALLã«ããããã«ãã¹ã«ãããä»»æããã»ã¹ãæž¡ããªããç¡äººã¹ã¯ãªããã«äžããrootã¯ãå£ããã被害ãå
šéšãã§ã¯ãªãããã®1ã³ãã³ãã ããã«çµã£ãŠããŸãã
2. èšçœ®åã«visudo -cfã§ææ³æ€èšŒãã
# å£ããsudoersãå
¥ãããšsudoèªäœãæ»ã¬ã®ã§ãå¿
ãæ€èšŒããŠããèšçœ®ãã
visudo -cf "$TMP"
install -m 440 -o root -g wheel "$TMP" /etc/sudoers.d/lily-dasd
/etc/sudoers.d/é
äžã¯ææ³ãå£ããŠãããã¡ã€ã«ã1åã§ããããšãããã ãã§sudoã³ãã³ãèªäœãå
šäœã§åããªããªããŸããäžåºŠå£ããšrootæš©éãèŠãäœæ¥ïŒsudoersã®ä¿®æ£å«ãïŒãå
šæ»
ããã®ã§ãäžæãã¡ã€ã«ã«æžããå
容ãvisudo -cfã§ææ³ãã§ãã¯ããŠããinstall -m 440 -o root -g wheelã§æ¬èšçœ®ããŠããŸããããŒããã·ã§ã³ã440ïŒrootææã»èªã¿åãå°çšïŒã«ããŠãåŸãã誰ããviã§çŽæ¥ç·šéããŠå£ãã«ãŒããå¡ãã§ããŸããå®éã«èšçœ®ããããã¡ã€ã«ãããã®éãã®æš©éã§å
¥ã£ãŠããŸãã
$ ls -la /etc/sudoers.d/lily-dasd
.r--r----- 53 root 12 Aug 13:47 /etc/sudoers.d/lily-dasd
3. èšçœ®çŽåŸã«ãæ¬åœã«å¹ããããå®è¡åã«æ€èšŒãã
ãããäžçªèå¿ãªãšããã§ãã«ãŒã«ãèšçœ®ããã ãã§ãå®äºããšèšã£ãŠããŸããã
# èšçœ®åŸã®æ€èšŒïŒmatsubaraãšããŠNOPASSWDãå¹ããïŒ
sudo -u matsubara sudo -n -l /usr/bin/killall dasd >/dev/null 2>&1 \
&& echo "[2/3] NOPASSWD æ€èšŒOK" \
|| { echo "[2/3] ðŽNOPASSWDæ€èšŒNG"; exit 1; }
sudo -n -lã¯ãã¹ã¯ãŒããªãã§ããã®ã³ãã³ããå®è¡ããæš©éãããããã ããåãåãããã¢ãŒãã§ããããã§å€±æãããå³exit 1ããŠãèšçœ®ããã«ãŒã«ãå®éã«ã¯å¹ããŠããªãããšããã®å Žã§æ€åºããŸããvisudoã®ææ³ãã§ãã¯ã¯ãå£ããŠããªãããããèŠãŠãããããæå³éãå¹ãããã¯å¥ã«ç¢ºãããªããšåãããŸããã
æ€èšŒãéã£ããšããã§ãããããååã®killallãå®è¡ãã广ã宿ž¬ããŸãã
echo "[3/3] dasdãä»ããååïŒlaunchdãå³åº§ã«åèµ·åããïŒ"
BEFORE="$(vm_stat | awk '/occupied by compressor/{gsub(/\./,"");printf "%.1f", $5*16384/1073741824}')"
killall dasd || true
sleep 5
AFTER="$(vm_stat | awk '/occupied by compressor/{gsub(/\./,"");printf "%.1f", $5*16384/1073741824}')"
echo "å§çž®ã¡ã¢ãª: ${BEFORE}GB -> ${AFTER}GB"
echo "swap: $(sysctl -n vm.swapusage)"
vm_statã®occupied by compressorïŒããŒãžæ°ïŒãGBã«æç®ããŠbefore/afterã䞊ã¹ãŠããã®ã§ããæ®ºããã€ãããã§ã¯ãªãå§çž®ã¡ã¢ãªãå®éã«èœã¡ããã©ããããã®å Žã®ãã°ã«æ®ããŸããããã§ä»¥éã¯mem-hog-guard.shåŽã®sudo -n /usr/bin/killall dasdãç¡äººã®ãŸãŸæåããããã«ãªããrestart-failed(no-sudo)ã ã£ãè¡ã¯restarted $commandã«å€ãããŸãã
NOPASSWDãèšèšãããšãã®åå²ç¹ã¯ã
ALLã«ãããã1ã³ãã³ãã«çµãããã§ããALLã«ããã°èšå®ã¯äžç¬ã§çµãããŸãããç¡äººã¹ã¯ãªãããrootæš©éã§äœã§ãã§ããç¶æ ã«ãªããŸããããã§ã¯æ€ç¥ããžãã¯ãæåãããdasdãšããååããéŸå€ãè¶ ãããšãã ãããšããå€å®ããªãã®ã§ãæž¡ãæš©éãããã«åãããŠ/usr/bin/killall dasdã®1æ¬ã ãã«çµããŸãããç£èŠã¹ã¯ãªããã®å€å®ç¯å²ãšãæž¡ãsudoæš©éã®ç¯å²ãäžèŽãããã®ããã€ã³ãã§ãã
èžãã èœãšã穎
cooldown_markãsudoã®æåŠããå ã«ç«ã€ â NOPASSWDæªèšçœ®ã®éãæ€ç¥ã«å€±æãããã³ã«30åã®ã¯ãŒã«ããŠã³ã ããéãã«ç©ã¿äžãããdasdãèšãã¿ç¶ããŠã次ã®å·¡åã§ã¯é»ã£ãŠã¹ããããããŠããvisudo -cfã¯ææ³ãã§ãã¯ã§ãã£ãŠå¹åãã§ãã¯ã§ã¯ãªã â ææ³ãæ£ãããŠãããŠãŒã¶ãŒåã察象ã³ãã³ãã®ã¿ã€ãã§ã«ãŒã«ãäžèŽããªãããšããããèšçœ®çŽåŸã«sudo -n -lã§å®å¹æ§ã確èªããªããšãå ¥ããã€ãããã§çµããNOPASSWD: /usr/bin/killallã ãã ãšå¯Ÿè±¡ãåºããã â åŒæ°ã®dasdãŸã§æžããŠsudoersã®ç §å察象ã1ã³ãã³ãã«åºå®ãããALLã¯ãã¡ãããã³ãã³ãåã ãã®èš±å¯ã§ãä»»æããã»ã¹ãrootæš©éã§killã§ããŠããŸã/etc/sudoers.d/é äžã¯1ãã¡ã€ã«ã®ææ³åŽ©å£ãå šäœã«æ³¢åãã â äžæãã¡ã€ã«ãžæžããŠããvisudo -cfãéããæ€èšŒæžã¿ã®ãã®ã ãinstallã§æ¬èšçœ®ãããçŽæ¥ç·šéã¯ããªã
ãŸãšã
- ç£èŠããžãã¯ïŒ
mem-hog-guard.shïŒã¯æåããæ£ããåããŠããããå®è¡åïŒsudo -nïŒãç¡ãããã«ãæ€ç¥ããŠéç¥ããã ããã«çž®éããŠãã - æš©éãæž¡ããšãã¯ã³ãã³ããšåŒæ°ãŸã§çµã£ãNOPASSWDã«ãŒã«ã«ãã
ALLãåºãèš±å¯ãé¿ãã - èšçœ®ã¯visudo -cfã§ææ³æ€èšŒ â install -m 440ã§æ¬èšçœ® â sudo -n -lã§å®å¹æ§æ€èšŒ â ååå®è¡ããŠbefore/afterã宿ž¬ã®é ã§ãã©ã®æ®µéããåãã¯ããã§æ¢ããªã
- ç¡äººã¹ã¯ãªããã«rootãæž¡ãã®ã¯ãæ€ç¥ããžãã¯ãå€å®ããç¯å²ãšæš©éã®ã¹ã³ãŒããäžèŽãããŠãã
次ã¯ãmem-hog-guard.shã®ã³ã¡ã³ãã«æ®ã£ãŠããã¯ãŒã«ããŠã³ãããã»ã¹åäœã§ã¯ãªãå
šäœã§1ã€ã ã£ãããã§ãdasdãçŽãã30åã®éã ãå¥ããã»ã¹ãéæŸãã«ãªã£ãŠããè©±ãæžãäºå®ã§ãã
LilyïŒ@bokuwalilyïŒâ å人éçºè ãClaude Code ã§èªåååºç€ãçµã¿ãªãããiOSã¢ããªãWebãµãŒãã¹ãéç£ããŠããŸã
- AIã§ãå¯ãŠãŠãåãä»çµã¿ããäœã£ãŠæ120äžã«ãã話㯠noteã®ææèšäº ã«ð°
- OSS: github.com/bokuwalily ð
- ææ°æ å ±ã»ãåãåãã㯠X @bokuwalily ãžð
- AIå°å ¥ã»èªååã®çžè«ãšå®è£ ãã³ãã¬7æ¬ã®é åžã¯ å ¬åŒLINE ããð¬
çããã® â€ïž ãã·ã§ã¢ãå±ã¿ã«ãªããŸãïŒ