解決策: 1. コンテナ内の「/etc/init.d/crond status」が実行状態であるかどうかを確認します; 2. 「/etc/pam.d/crond」ファイルを変更し、 "required" "Change to "sufficient"; 3. "/etc/init.d/crond restart" を使用して crond サービスを再起動します。
このチュートリアルの動作環境: linux7.3 システム、docker バージョン 19.03、Dell G3 コンピューター。
docker では centos イメージがデフォルトで使用され、イメージには crond がインストールされません。yum でインストールが成功すると、crontab はインストールされます。発効しません。
1. まず、コンテナ内の /etc/init.d/crond ステータスが実行状態であるかどうかを確認します。
最初の手順で解決できない場合は、次の方法を参照してください:
2. /etc/pam.d/crond ファイルを変更し、必要な部分から十分な部分まで変更してから、 restart crond サービス: /etc/init.d/crond restart
注: この問題は、centos7 の基本イメージには存在していないようです。
知識を広げる
最も早い解決策
1. ホスト マシンで
1 3 * * * root cd /data/wwwroot/xxx && docker-compose exec app php think xxx >> /var/log/crontab_xxx.log
docker-compose exec app php think xxx has been unownedly completed
2. 次に、crontab をコンテナにインストールしますが、実行は依然として失敗します。重要なのは、関連するログがないことです。 crontabも起動していることを確認してください。 /etc/init.d/cron status
3. rsyslog をインストール、apt-get install rsyslog、service rsyslog start
View /var/log/syslog
Dec 25 09:07:07 1a8e4fd5c766 crontab[15120]: (root) BEGIN EDIT (root) Dec 25 09:07:34 1a8e4fd5c766 crontab[15120]: (root) REPLACE (root) Dec 25 09:07:34 1a8e4fd5c766 crontab[15120]: (root) END EDIT (root) Dec 25 09:08:01 1a8e4fd5c766 cron[15100]: (root) RELOAD (crontabs/root) Dec 25 09:08:01 1a8e4fd5c766 CRON[15133]: Cannot make/remove an entry for the sp
4 /etc/pam.d/cron
セッションをコメントアウトして必要な pam_loginuid.so
5. cron を再起動して正常に実行します
また、この行を変更します。 dockerfile
RUN sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/crond
crontab の実行にも落とし穴があります。環境変数が読み込まれ、PHP が絶対パスを記述する必要があるため、手動でスクリプトを実行しても問題ありません。
/usr/local/bin/php think xxx
推奨調査: "docker ビデオ チュートリアル>>
以上がcrontab が有効にならない問題を docker が解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。