序文 最近、仕事でいくつかの問題が発生しました。crontab でスケジュールされたタスクが実行されませんでした。後でオンラインで検索したところ、主な理由は次のとおりです。 1 crondサービスが開始されていません Crontab は Linux カーネルの機能ではありませんが、開始および停止できる crond サービスに依存しています。停止している場合は、スケジュールされたタスクを実行できません。解決策は、オンにすることです。 クロン または サービスcrond開始 crond コマンドが存在しないというメッセージが表示される場合は、誤って削除された可能性があります。次のコマンドを使用して CentOS で再インストールできます。 yum -y crontabsをインストール 2. 権限の問題 たとえば、スクリプトに x 実行権限がない場合、解決策は次のようになります。 実行権限を追加するか、bash abc.shを使用して実行します また、crontab タスクが属するユーザーが特定のディレクトリへの書き込み権限を持っていない場合にも、タスクが失敗する可能性があります。 3 パス問題 一部のコマンドはシェルでは正常に実行されますが、crontab で実行すると常に失敗します。 crontabが使用するshがパスを正しく識別していないことが原因である可能性があります。たとえば、シェルにrootとしてログインし、/root/test.shを実行した後、 ./test.sh それでおしまい。しかし、crontab ではこのスクリプトは見つかりません。たとえば、完全なスクリプトを記述します。 ルートディレクトリ 4. 時間差の問題 サーバーとクライアントの間には時間差があるため、crontab の時間はサーバーの時間に基づきます。 時差は本当にイライラします。私自身も経験しました。現象は次のようになります。 (1)スケジュールされたスクリプトを設定し、dateコマンドを使用してサーバーの時間を監視しました。スクリプトが実行されたとき、スクリプトは実行されませんでした。 (2)しかし、スクリプトを1分ごとに実行するように設定し、問題なく動作する。 しまった、サーバーの時間は正しいのか?タイムゾーンを追加する必要がありますか?そこで、スクリプトの時間を 10 時間、12 時間、または 8 時間短縮しようとしましたが、うまくいきませんでした。 しかし、実行されない原因は時間の不整合であることは明らかです。 最終的に、次の 2 行で問題は解決されました。 cp /usr/share/zoneinfo/アジア/上海 /etc/localtime サービスcrondの再起動 こちらの記事を参照してください: https://www.jb51.net/article/154296.htm 5. 変数の問題 コマンドに変数が含まれていても、実行時に crontab に変数が含まれていないことがあり、これによっても実行が失敗する可能性があります。 検証後、スケジュールされたスクリプト test.sh は上記のいずれの理由でも実行されませんでした。実際、私のスクリプトは 1 つの文だけです。 #!/bin/bash エコー 123 >> テストファイル このように設定したタイミングスクリプトをテストしたいのですが、スクリプトを1分ごとに実行するように設定しましたが、スクリプトが配置されているディレクトリにファイルが見つかりません。手動で実行します。 # sh テスト.sh しかし、このファイルはスクリプトが配置されているディレクトリで確認できます crontabがまったく実行されていないのではないかと疑ったので、crontabに直接追加しました */1 * * * * エコー 123 >> /home/denglinjie/testFile testFile ファイルが生成され、crontab が実行されたことを示しているので、スクリプト自体に問題があるようです。 最後に、testFileのフルパスをここに記述する必要があることがわかりました。私は単純に、testFileはスクリプトが配置されているディレクトリに生成されると考えていたため、次の形式に変更しました。 #!/bin/bash エコー 123 >> /data/denglinjie/testFile そしてそれは機能します。 実際、パスは間違いやすい場所です。/home/denglinjie ディレクトリにスクリプト ファイル test1.sh があり、同じディレクトリにスクリプト ファイル test2.sh があるとします。 test2.sh は test1.sh 内で実行され、相対パス、つまり test1.sh を基準としたパスが使用されます。 crontab -eで編集する場合、実行方法は sh /home/denglinjie/test1.sh。sh test2.sh を呼び出すと、システムは crontab ファイルがあるディレクトリで test2.sh を探していると認識しますが、見つからないため実行が失敗します。 最初は、実行するために書いたスクリプト ファイルと、他の呼び出されるスクリプトおよび crontab ファイルを 1 か所に置いて、それらをプルできるようにしようと思いましたが、権限の問題のためか、/var/spool/cron ディレクトリに入ることができず、失敗しました。 したがって、別の解決策は、スクリプトを実行する前にcd /home/denglinjieコマンドを使用してスクリプトが配置されているディレクトリに入ることです。 ------------------------------------------------------------------ 最近、crontabが実行されない新たな理由が発見されました。 ここで実行したいのは Python スクリプトです。Python スクリプトのディレクトリは次のとおりです。 /data/denglinjie/work/UpdateModuleSwitch 当初、スケジュールされたタスクは次のように書かれていました。 0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py 時点では実行されていないことがわかりました。update_switch.pyの内容の一部は以下のとおりです。 pymongoをインポートする つまり、スクリプトにインストールした pymongo を導入しました。この pymongo は指定された python バージョンにインストールされていることに注意してください。 実行されない理由: crontab スケジュールタスクが実行されると、使用される Python が私の Python ではなく、使用される Python に pymongo がインストールされていないため、インポートに失敗します。 解決策は、次の形式に変更することです。 0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;/data/zhoumi/install_evn/bin/python update_switch.py 実行する Python プログラムを指定します。この Python プログラムには pymongo がインストールされ、バインドされています。または、次の形式を使用します。 0 * * * * エクスポート PATH=/data/zhoumi/install_evn/bin/:$PATH;cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py 私の Python は自分のユーザー ディレクトリにインストールされているため、システムはこの Python を見つけることができません。そのため、システムの PATH 環境変数に Python を追加するだけで済みます。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: MySql インデックスの詳細な紹介と正しい使用方法
日常の開発タスクでは、データ テーブル内のグループ化フィールドに基づいて統計データを取得するために、...
事前に言っておく気まぐれですが、MySQL の order by sorting にどのようなルール...
最初のステップ組み込みのパッケージ管理機能で一度削除する yum 削除 nodejs npm -y ...
Debian の紹介Debian は、広い意味では、フリーなオペレーティング システムの作成に専念...
目次安定スロットリング要約する安定自動ドアは人を感知してドアを開け、5 秒間のカウントダウンを開始し...
目次序文最適化ソ連オンデマンドインポート1. ルーティングファイルでコンポーネントをオンデマンドでイ...
Centos のサーバー側への適用がますます普及するにつれて、Centos7 もますます使用されるよ...
テーブルを美しくするために、セルごとに異なる境界線の色を設定できます。基本的な構文<TD 境界...
目次序文電話使用法成し遂げるシンプルな実装バージョン:アップグレード版:適用する使用法成し遂げるバイ...
目次Node.js の公式紹介Node.jsのコア開発言語ウェブ上の JavaScript と No...
今日、非常に奇妙な状況に遭遇しました。docker イメージを更新した後、docker-compos...
長い間ウェブサイトを作ってきましたが、入力時のnameとidの違いがまだわかりません。最近jQuer...
この記事では、全選択または選択を反転する機能を実現するためのJavaScriptの具体的なコードを参...
1. 矢印関数1. 矢印関数自体はこれをバインドしないという事実を利用します。 2. render(...
目次序文1. リクエスト内容が大きすぎる解決: CDN の紹介リクエストリソースを圧縮する1. HT...