Systemdタイマーを使用してNextcloudのCronを自動的に実行させる
Nextcloudのcronモードを確認し、systemdサービスとタイマーを修復し、起動後および5分ごとにバックグラウンドジョブが実行されていることを確認してください。
Nextcloudの管理ページでバックグラウンドジョブが最近実行されていないと表示される場合、クリーンアップ、通知、その他のスケジュールされたタスクが遅れる可能性があります。systemdサーバーの場合、通常はNextcloudをcron.phpsystemdサービスからWebサーバーアカウントとして実行し、そのサービスにタイマーを有効にしてスケジュールすることで解決します。Nextcloudの最新の管理マニュアルには2ユニットの例が記載されていますが、パスとサービスアカウントはインストール環境に合わせてください。
Nextcloudのバックグラウンドジョブは、cron.php呼び出されたときに実行されます。systemdサービスが実行するコマンドを定義し、タイマーがそのサービスをスケジュールに基づいて起動します。サービスを手動で実行してもタイマーが起動しない場合は、タイマーの起動方法を確認してください。タイマーは起動するもののサービスが失敗する場合は、コマンド、PHP環境、および権限を確認してください。
編集する前に、実際の Nextcloud ディレクトリと HTTP ユーザーを確認してください。この例では、Debian および Ubuntu で一般的な/var/www/nextcloudとを想定していますwww-data。アカウントはwwwrun、apacheシステムによっては 、 、または別のユーザーである可能性があります。Nextcloud では、ファイルの所有権が一貫しているように、コマンドライン ジョブを HTTP ユーザーとして実行する必要があります。Nextcloud occ のドキュメントを参照してください。
systemdで使用する予定のPHP実行ファイルとcronスクリプトをテストしてください。
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/cron.php
アカウント、PHPパス、Nextcloudパスは、ご使用のホストに合わせて変更してください。コマンドがPHPエラー、拡張機能の欠落、権限の問題、メンテナンスモード、またはデータベース接続の失敗を報告する場合は、まずそれらを解決してください。タイマーは失敗したコマンドを修正することはできません。
管理設定 → 基本設定 → バックグラウンドジョブを開き、Cronが選択されていない場合は選択します。Nextcloudディレクトリからこのコマンドを実行することもできます。
cd /var/www/nextcloud
sudo -E -u www-data php occ background:cron
Nextcloudは、コマンドラインから実行する場合、スクリプトがモードを自動的に設定するため、管理設定でCronを選択することは必ずしも必要ではないと述べていますcron.php。明示的に設定することで、意図した本番モードが明確になります。Nextcloudは本番環境ではシステムcronの使用を推奨しており、バックグラウンドジョブに関するドキュメントでは、代替スケジューラとしてsystemdタイマーについても説明しています。
以下の内容で作成または更新します/etc/systemd/system/nextcloudcron.service。systemd が対話型シェルに依存しないように、PHP へのフルパスを使用しますPATH。
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
ExecCondition=/usr/bin/php -f /var/www/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process
Userウェブサーバーアカウントと、PHPとNextcloudの対応する場所へのパスの両方を変更します。この条件は、ジョブを実行する前にインスタンスが正常に動作しているかどうかを確認します。条件が失敗した場合、systemdはサービスをスキップする可能性があります。条件を削除または変更する前にKillMode=process、Nextcloudがメンテナンスモードになっているかどうかを確認し、ジャーナルを調べます。Nextcloudの例では、cronプロセスが終了した後もcronによって起動された外部プログラムが継続できるようにするために、 を使用しているため、 はそのままにしておきます。サービスユニットには[Install]セクションは必要ありません。
作成します/etc/systemd/system/nextcloudcron.timer。このスケジュールは起動後5分後に開始し、各サービスの起動後5分間待機します。
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5 min
OnUnitActiveSec=5 min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.target
systemdをリロードしてユニットファイルを読み込むようにし、その後、1つのコマンドでタイマーを有効化して開始します。
sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer
有効にすると、次回以降の起動時にタイマーが開始されます。--nowは、すぐに開始します。繰り返しタイマーのようにサービス自体を有効にしないでください。タイマーは、 の下に属する単位ですtimers.target。Nextcloud の最新マニュアルでは、これらの間隔設定と必要な有効化コマンドについて説明しています。マニュアルの古いバージョンには、サービスのインストールに関する古いセクションが含まれていたため、代わりに最新の単位の例に従ってください。
タイマーの状態と次回の実行予定時刻を確認してください。
systemctl status nextcloudcron.timer
systemctl list-timers nextcloudcron.timer
タイマーは「待機中」または「アクティブ」と表示され、リストには次回の起動時刻が表示されます。次に、サービスの最新の実行状況を確認してください。
systemctl status nextcloudcron.service
journalctl -u nextcloudcron.service --since today
タイマーは各サービス実行が失敗した場合でもアクティブになる可能性があるため、両方のユニットを確認してください。サービスが見つからない場合、または systemd がファイルを拒否する場合は、 を実行しsystemd-analyze verify /etc/systemd/system/nextcloudcron.service /etc/systemd/system/nextcloudcron.timer、報告された構文またはパスの問題を修正してから、systemd を再度ロードしてください。サービスが正常に終了しなかった場合、ジャーナル出力には、無効な PHP パス、間違ったユーザー、失敗した条件、または Nextcloud ランタイム エラーが示されることがよくあります。タイマーに次の実行がない場合は、正確なタイマーファイル名を確認し、 を実行してdaemon-reload、 で有効になっていることを確認してくださいsystemctl is-enabled nextcloudcron.timer。
次のタイマーが起動したら、Nextcloud のバックグラウンド ジョブの状態を再度確認してください。古い警告ではなく、最近の実行時刻が表示されるはずです。タイマーとサービスの両方が正常に実行されたと報告されているにもかかわらず、管理ページがまだ古い状態のままの場合は、インスタンスのログと Web サーバーで使用されている PHP バージョンを確認してください。コマンドライン PHP は Web ランタイムと異なる場合があります。この設定は、通常の Linux ホストでの systemd スケジューリングに対応しています。コンテナ化されたインストールやアプライアンスのインストールでは、独自のサービス スーパーバイザーを介して cron を管理している場合があるため、コンテナのファイルにアクセスできないホスト ユニットを追加するのではなく、そのプラットフォームでサポートされている方法を使用してください。
Nextcloudのcronモードを確認し、systemdサービスとタイマーを修復し、起動後および5分ごとにバックグラウンドジョブが実行されていることを確認してください。
信頼性の高いNextcloudファイルロックを有効にし、適切なRedisまたはValkeyバックエンドを選択し、同時ファイル変更のリスクを冒すことなく警告が解消されることを確認してください。
最新のアップデート、HTTPSおよびHSTS、正確なリバースプロキシの信頼設定、およびパブリックサーバーに対するチェックによって、Nextcloudのスキャンでよく見られる問題を修正します。
必要なストレージに対してNextcloud SSEを設定し、暗号化キーを保護し、既存ファイルを暗号化する前に転送量とCPUへの影響を測定します。
Nextcloudのファイル検索機能をElasticsearchに接続し、ドキュメントの内容をインデックス化し、サーバーとセキュリティのニーズに合った設定を選択してください。
Nextcloudを設定して、削除されたファイルを一定期間後に削除するようにし、バックグラウンドジョブを確実にスケジュールし、すべてのユーザーのゴミ箱を空にするコマンドを回避するようにします。
NextcloudのOCC修復を安全に実行し、データベースの変更をプレビューして、警告が残る理由を確認してください。
PHP、Nginx、Apache、一時ストレージ、タイムアウトの設定を調整することで、Nextcloudブラウザからのより大きなファイルアップロードを可能にし、どの制限がファイルのアップロードを妨げているかを確認してください。
Nextcloudが実際に使用するPHPメモリの制限を設定し、該当するサービスを再起動して、管理画面の概要で512MBの設定を確認してください。
NextcloudのS3バックエンドを使用して、適切なエンドポイント、認証情報、アクセス範囲、および検証手順を設定し、互換性のあるオブジェクトストレージバケットをマウントします。