Mastodon:在定期任務中清理緩存

維護 mastodon 伺服器時,需要定期清理緩存,需要執行的指令為

RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove --days=14
RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove-orphans

——這樣的指令,直接敲在 linux 命令行里,是可以正常執行的,但把它們加到計劃任務 crontab -e 里,如

30 3 * * * RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove --days=14

執行的時候,可能會報錯:

/usr/bin/env: ‘ruby’: No such file or directory

如果管理員並沒有發現,就會導致硬碟被佔滿;或者使用遠程存儲如 Scaleway 時,超出免費的額度,多出一大筆賬單。


crontab 計劃任務運行時,默認的路徑 $PATH 環境變量,只有

/usr/bin:/bin

並不包括 ruby 所在的路徑,所以無法執行上面的清理指令。需要在運行定時任務時,把 ruby 的路徑加進來。

在命令行運行

which ruby

得到當前 ruby 程式的位置,通常為:

/home/mastodon/.rbenv/shims/ruby

比較清爽的方式,是把定時清理緩存的指令,做成 mastodon_clean.sh 命令文件,清理緩存之前,先添加 ruby 所在的路徑

export PATH=$PATH:/home/mastodon/.rbenv/shims

RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove --days=14
RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove-orphans

不要忘記把 .sh 文件設為可執行:

chmod u+x mastodon_clean.sh

然後 su 到 mastodon 程式所屬的用戶(通常也是 mastodon),執行 crontab -e,寫入需要運行的 .sh 命令

30 3 * * * /pathto.../mastodon_clean.sh

就可以了。也可以把執行的結果輸入到 log 文件,查看是否正確運行:

30 3 * * * $HOME/mastodon_clean.sh >>  /pathto.../mastodon_clean.log 2>&1

Join the Conversation

1 Comment

  1. 站长你好,申请本站注册后死活收不到电子邮件来确认(>人<;)outlook、Gmail和ProtonMail试了都不行。不知是什么缘故

Leave a comment

Your email address will not be published. Required fields are marked *




Enter Captcha Here :