## 大まかな流れ 1. logファイルを入れるディレクトリ・ファイルを作成 2. bashを書く 3. cronに設定 ## 詳細 ### 1.logファイルを入れるディレクトリ・ファイルを作成 今回は「`/home/mastodon/log/`」に「`media-clear.log`」を作成した。 ``` # su - mastodon $ mkdir log $ nano media-clear.log ``` `media-clear.log`には何も書かなくてよい。 ### 2.bashを書く `root`に戻ってbashを書く。 ``` $ exit # nano /usr/local/bin/media-clean.sh ``` #### bashファイル(media-clean.sh) ``` bash #!/bin/bash export RAILS_ENV=production #変数設定 DAY=3 # ディレクトリ移動 cd live # 削除開始~削除開始時の容量 echo "$(date +"%Y-%m-%d %H:%M") Cache Delete start" /home/mastodon/.rbenv/shims/bundle exec bin/tootctl media usage #参照されていないメディアを削除 /home/mastodon/.rbenv/shims/bundle exec bin/tootctl media remove-orphans # プレビューカード系の削除 /home/mastodon/.rbenv/shims/bundle exec bin/tootctl preview_cards remove --days=$DAY # リモートメディアの削除 /home/mastodon/.rbenv/shims/bundle exec bin/tootctl media remove --days=$DAY # 削除終了~削除後の容量 echo "$(date +"%Y-%m-%d %H:%M") Cache Delete finish" /home/mastodon/.rbenv/shims/bundle exec bin/tootctl media usage exit ``` 変数`DAY`に残しておきたい日数(ここでは3日残している)を記入。`export RAILS_ENV=production`で環境変数を設定し、実行コマンドで直接bundleのパスを指定するのがコツ。 その後、パーミッションを755に指定する。 ``` # chmod 755 media-clean.sh ``` ここで一度テストをする。この時実際に削除コマンドを実行すると数時間単位で時間を食うので、削除コマンド3種をコメントアウトして実行すること。`tootctl media usage`が実行&`media-clear.log`に記録できてたらOK。 ### 3.cronに設定 「mastodon」ユーザーで実行したいので、「`/var/spool/cron/<ユーザー名>`」の方法で設定する。 ``` # crontab -u mastodon -e ``` 開いたら一番下にcronの呪文を書く。一番最初に利用するエディターを聞かれるので答える。 ```cron 0 3 * * 0 /usr/local/bin/media-clean.sh > /home/mastodon/log/media-clear.log 2>&1 ``` 上記は「日曜日の午前3時」に実行するように指定。最後に保存してその時刻に動くかどうか確認する。(crontabはリロードしなくてもOK) ## リンク - [[Mastodonの画像メンテメモ]] - [【違い】/etc/crontabと/var/spool/cron/[user] - Qiita](https://qiita.com/takahashi-kazuki/items/77d669d4414c6ec185f9) - [systemdでmastodonサーバ上のメディア削除を定期処理化する - Qiita](https://qiita.com/g_fukurowl/items/ef95f2311baaa0900276)