1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NextcloudにおけるWebHosting(レンタルサーバ)さんのプロセスkillとの戦い

Last updated at Posted at 2025-01-19

Nextcloudに先月デビューしました。
お金が無いのでWebHosting(レンタルサーバ)さんでの稼働を試みてます(ご迷惑をおかけいたします)。

("Cheapest mass storage VPS"で検索。6ユーロ(約900円強)、14GB(SSD), 2TB(HDD)ってのが最安だった(2025.01)。最悪それに移ることになりますが、お金/時間なくて、レンタルサーバで使わせて頂けないか試行錯誤。)

問題の発覚

NextCloudが「Some jobs have not been executed since 1ヶ月前. Please consider increasing the execution frequency.」と提示。webcronを実行しているはずなのに原因がわからなかった。

NextCloudのタスクは多すぎ

  • 概要: 『uploadしたファイルのmetaデータ抽出もtaskとなる」。しかも、1ファイル/1タスク。

私はNextcloudのタスクが多いことを想像できてなかった。

  • php occ background-job:listはタスクを一覧できる、実行したら、

下記通り、左TaskIDが万単位のタスクはどうやらUploadしたファイルの検索等用のメタデータを更新する処理みたい。つまり、uploadしたファイル毎にメタデータ生成taskを実施しないといけない。レンタルサーバですので、cron.phpを長時間処理するとKilledされる。処理終わらない。

| 41    | OC\Preview\BackgroundCleanupJob                                   | 2025-01-18T04:51:28+00:00 | null               |
| 42    | OC\TextProcessing\RemoveOldTasksBackgroundJob                     | 2025-01-18T04:51:29+00:00 | null               |
| 43    | OC\User\BackgroundJobs\CleanupDeletedUsers                        | 2025-01-18T04:51:31+00:00 | null               |
| 97    | OCA\Money\BackgroundJob\CleanupDatabase                           | 2025-01-18T02:16:10+00:00 | null               |
| 22584 | OC\FilesMetadata\Job\UpdateSingleMetadata                         | 1970-01-01T00:00:00+00:00 | ["your_id",37335] |
| 22585 | OC\FilesMetadata\Job\UpdateSingleMetadata                         | 1970-01-01T00:00:00+00:00 | ["your_id",37336] |
| 22586 | OC\FilesMetadata\Job\UpdateSingleMetadata                         | 1970-01-01T00:00:00+00:00 | ["your_id",37337] |
(ずっと続く....)

つまり、頻繁にcronしないと未Task蓄積してしまう仕様にもかかわらず、レンタルサーバ側はそれをゆるしてくれない(当然である、高負荷は死活問題である。低価格で提供してくださっているのだから仕方ない)。

nice -19やらタイムアウト時間やら私のレンタルサーバは無意味。

WebCronはシステムcronと同等と思い違いしました

確認不足かなのかもしれないが、NextCloud(現在ver30.0.5)の各cronの挙動

  1. Ajax: Task1つ処理/ページ読み込み
  2. WebCron: 同上(と見えた)←←★後述のタスク一覧で1つずつしか減ってないのを確認。
    1. バックグラウンドジョブに明記されていた、下記に内容を記します。
    2. 「WebCron が 5 分ごとに呼び出されると、インスタンスは 1 日あたり 288 のバックグラウンド ジョブに制限されますが、これは非常に小さなインスタンスにのみ適しています。」→よほどUploadファイル数が少なくなければ飽和してしまうよね。。。
  3. (ローカル)cron: 指定間隔を超えた全タスク実行

問題は、WebCronは、1Taskの処理が終わると終了している模様。

別のCMSでは、WebCronを選んでもローカルCronと同等の処理していたので、WebCron==ローカルcronであると思い込んでいた。間違いだった。

しかし、レンタルサーバさんは5分事にローカルcronを実行してくれない、ローカルcronを10までしか登録できない仕様。もっとプロセス存続時間が長寿でないと実行終えない。なのでWebCronを実行してたが、1回の呼び出しで1Taskしか実施されない。これがcron未処理タスクを飽和していた根本原因だった模様。

未整理

  1. cron.phpは何も標準出力しないので、正しく処理できているか不明、出力する方法ご存知ならお教え願います。
    1. php -vvv cron.phpでも無口なcron.phpさん。。。

まとめ

  1. NextCloudはレンタルサーバさんのcron.phpをkilledは想定されてない仕様(みたい)
  2. 『すべてのcron(Axjx, webcron, local cron)が同時に使えてほしいのに排他的にしか使えない』
    1. Nextcloudのcronは選択したcronしか実行を受け付けない。モード切り替えが必要
  3. Uploadしたファイル1つに付き、メタ印加Taskが発生。沢山のファイルアップロードするとレンタルサーバではTask処理が間に合わない
  4. cron.phpがKillされるとWebインタフェース上(ttps://your_nextcloud/index.php/settings/admin)ではTask処理されたとみなされないみたい。cron.phpを実施してもKillされると、「最終ジョブ実行は ??分前 です。何か問題が発生しています。」と**『cron.phpが未実施のように表示される→心配で調べ時間取られる』**

解決策

[通常]レンタルサーバさんのcronの上限いっぱいにcron.phpの実行を登録させてもらう。

  1. 毎分実行無理なWebインタフェースなら、10分毎に6個のジョブ作成

[未処理タスク飽和下] 一つひとつTask実施

WebCronの代わりに手動/スクリプトでひたすらhttp(s)経由でcron.phpを実行。

母艦PCからSSHでタスク残量確認して、リモートTask実施、残量一定以下で終了する方法

  1. 下記処理を実施。Killedを検出して、再実行。処理必要タスクがなくなるまで実施
  2. (パターン1)SSh+occコマンドでWebCronモードに切り替え。http(s)経由でcron.phpを実行。定期的にTask残り#### 確認して一定以下になったら終了。Webサーバ経由なのでKilledされにくいと思われる。
  3. (パターン2)パターン1のhttp経由でcron.phpを実行する代わりにoccコマンドでタスク実行。
  4. (私は未完): SSH経由でphp cron.phpの実行。Killedされたのをうまく検出せずに母艦PCのrunが落ちる。すると、local cronモードへ戻せない、など問題あり。

以上。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?