Cron&crontab、説明

ルカイン 公表 少し前に cronとcrontabに関する優れたチュートリアル 共有する価値があると思います。 cronは、Windowsのスケジュールされたタスクに相当するものです。、端末から処理されることのみ。 同じ目標を達成するために視覚的なインターフェースを好む人は、これを見ることができます 別の項目.

cronとは何ですか?

cronという名前は、「時間」を意味するギリシャのクロノスに由来しています。 Unixオペレーティングシステムでは、cronは、プロセスまたはスクリプトを定期的に(たとえば、毎分、日、週、または月ごとに)実行する通常のバックグラウンドプロセスマネージャー(デーモン)です。 実行する必要のあるプロセスとそれらを実行する必要のある時間は、crontabファイルで指定されます。

コモfunciona

cronデーモンは /etc/rc.d/ o の/ etc / init.dディレクトリ 分布に応じて。 cronはバックグラウンドで実行され、crontabタスクテーブルを毎分チェックします / etc / crontab またはで / var /スプール/ cron 達成すべきタスクを探して。 ユーザーとして、いくつかのプロセスを自動化するために、タスクを含むコマンドまたはスクリプトをcronに追加できます。 これは、たとえば、システムまたは適切なバックアップシステムの更新を自動化する場合に役立ちます。

関連記事
チュートリアル:.tar.gzおよび.tar.bz2パッケージをインストールする

Crontabとは何ですか?

Crontabは、ユーザーが指定した時間に実行されるコマンドのリストを格納する単純なテキストファイルです。 Crontabは、スクリプトまたはコマンドを実行する日時、実行権限を確認し、バックグラウンドで実行します。 各ユーザーは独自のcrontabファイルを持つことができます。実際には / etc / crontab これはrootユーザーのcrontabファイルであると見なされます。通常のユーザー(およびrootでさえ)が独自のcrontabファイルを生成したい場合は、crontabコマンドを使用します。

Crontabは、単純なシステムユーザーまたはrootユーザーとして、マルチユーザーシステムでcronタスクを管理する最も簡単な方法です。

crontabの使用

簡単な例から始めます。

システムの更新を自動化して、「常に更新する必要があり、気に入らない!」という煩わしさを解消します。

関連記事
システムを知るためのコマンド(ハードウェアといくつかのソフトウェア構成を特定する)

まず、スクリプトを作成します。 このスクリプトはcronによって呼び出され、実行するすべての命令が含まれます。したがって、cronに含める前に、いくつかのケースといくつかの方法でテストする必要があります。次のような単純な更新スクリプトです。

#!/ bin / bash #script update example#ディストリビューションを選択#debian-ubuntu#apt-get update&apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

ディストリビューションラインから#を削除します。 Ubuntu / Debianの場合、apt-getで始まります。

スクリプトをupdate.shとして保存します(例:スクリプトディレクトリを自宅に)。 上記のスクリプトの実行権限を次のように変更します。

chmod a + x〜 / scripts / update.sh

スクリプトを数回実行して、すべてがスムーズに実行されることを確認し、必要なものを変更します(エラーが含まれていてはなりません。含まれていない場合、cronはエラーを何度も繰り返すだけです)。 次に、タスクをcrontabに追加します。

crontabにタスクを追加する

crontab -eを使用してcrontabのエディションを実行します。一部のディストリビューション(Ubuntuなど)では、必要なテキストエディターを選択するオプションが提供され、残りはviのままです。 crontabファイルは次のようになります。

#mh dom mondowユーザーコマンド

ここで:

  • m スクリプトが実行される分に対応し、値の範囲は0〜59です。
  • h 正確な時間、24時間形式が処理され、値の範囲は0〜23で、0は深夜12:00です。
  • 太陽 月の日を指します。たとえば、15日ごとに実行する場合は15を指定できます。
  • ダウ は曜日を意味し、数値(0から7、0と7は日曜日)または英語での日の最初の3文字(月、火、水、木、金、土、太陽)を指定できます。
  • user コマンドを実行するユーザーを定義します。rootにすることも、スクリプトを実行する権限がある場合は別のユーザーにすることもできます。
  • command 実行するコマンドまたはスクリプトの絶対パスを指します。例: /home/usuario/scripts/update.sh、スクリプトを呼び出す場合は実行可能である必要があります

明確にするために、cronタスクのいくつかの例を説明しました。

15 10 * **ユーザー/home/user/scripts/update.sh

毎日午前10時15分にupdate.shスクリプトを実行します

15 22 * **ユーザー/home/user/scripts/update.sh

毎日午後10時15分にupdate.shスクリプトを実行します

00 10 * * 0 root apt-get -yupdateルートユーザー

毎週日曜日の午前10時に更新を実行します

45 10 * * sun root apt-get -y update

ルートユーザーは毎週日曜日(日)午前10時45分に更新を実行します

30 7 20 11 *ユーザー/home/usuario/scripts/update.sh

20月7日の30:XNUMXに、ユーザーはスクリプトを実行します

30 7 11 11sunユーザー/home/usuario/scripts/petal_con_velitas.sh

11月7日の午前30時XNUMX分、つまり日曜日に、ユーザーは自分のシステム管理者(つまり、私)を祝います。

01 * * **ユーザー/home/usuario/scripts/molestorecordatorio.sh

毎日毎時毎分毎分迷惑なリマインダー(非推奨)。

彼らはまだ処理することができます 特別な範囲:

30 17 * * 1,2,3,4,5

月曜日から金曜日まで、毎日午後5時30分に。

00 12 1,15,28 * *

毎月12日、28日、XNUMX日の正午(給与計算に最適)

これが紛らわしい場合は、crontabが処理します これらの範囲を定義するための特別な文字列.

@reboot起動時にXNUMX回実行
@yearlyは年に0回だけ実行されます:0 1 1 XNUMX *
@毎年@yearlyと同じ
@monthlyは、最初の日である月に0回実行されます:0 1 XNUMX * *
@weeklyWeekly週の最初の0時間の最初の分。 0 0 * * XNUMX″。
@毎日、午前12:00 0 0 * * *
@dailyと同じ@midnight
@hourly毎時の最初の0分:XNUMX * * * *

その使用法は非常に簡単です。

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

最後だが大事なことは:

cronジョブ管理

crontabファイル

既存のcrontabファイルをユーザー定義ファイルに置き換えます

crontab -e

ユーザーのcrontabファイルを編集します。新しい行はそれぞれ新しいcrontabタスクになります。

crontab -l

すべてのユーザーのcrontabタスクを一覧表示します

crontab -d

ユーザーのcrontabを削除します

crontab -c ディレクトリ

ユーザーのcrontabディレクトリを定義します(これには、ユーザーの書き込みおよび実行権限が必要です)

crontab-uユーザー

別のユーザーのcrontabを処理するためのプレフィックス、例:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user

このツールは、他の多くのツールと同様に、以下でより詳細に見ることができます。

Lucainに感謝します!

記事の内容は、次の原則に準拠しています。 編集倫理。 エラーを報告するには、 ここで.

48コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   アルバロオルティス

    うーん…少し紛らわしい。

  2.   強壮剤

    * / 30分ごとに実行される30が(分フィールドに)欠落しています...

    1.    えーと

      コメントを確認することを決定するまで、これだけコメントするつもりでした😀
      この修飾子は非常に重要な情報であり、非常に便利なものです。

      1.    キカ

        こんにちは!
        現在、45分ごとに構成をテストしています。

        * / 45 * * * *であり、命令は毎時45分および毎時実行されます。 つまり、次のようになります。

        3:45、4:00、4:45、5:00、5:45、6:00、6:45などのように実行されます。

        何か問題がありますか?45分ごと、または少なくとも45時間ごとにXNUMX分にXNUMX回になるようにするには、どうすればよいですか。

    2.    キカ

      こんにちは!
      現在、45分ごとに構成をテストしています。

      * / 45 * * * *であり、命令は毎時45分および毎時実行されます。 つまり、次のようになります。

      3:45、4:00、4:45、5:00、5:45、6:00、6:45などのように実行されます。

      何か問題がありますか?45分ごと、または少なくとも45時間ごとにXNUMX分にXNUMX回になるようにするには、どうすればよいですか。

  3.   Slack

    こんにちは、cronがどのように機能するかを明確にするための情報が非常に役立ちます。
    バイト

  4.   Slack

    ために *

  5.   猟師

    すばらしい、cronがどのように機能するかを明確にしてくれてありがとう..少し手を入れましょう🙂

  6.   ジェイコブ

    私が理解しているこの行は午後10時15分に実行されます。間違っている場合は、訂正してください。
    さて、それは午前10時15分と言います
    15 22 * **ユーザー/home/user/scripts/update.sh

  7.   アグス

    こんにちは! とても良い情報。
    30分ごとにスクリプトを実行するには、CronTabに追加する必要のある行は次のようになります。 "XNUMX * * * * root Scrip.sh"正解ですか? どうもありがとうございます!

  8.   Linuxを使いましょう

    いいえ。正しく覚えていれば、そのためには/ 30 * * **ルートScrip.shを配置する必要があります。
    つまり、30の前に/を追加します。
    乾杯! ポール。

  9.   ヨナタン

    こんにちは私はあなたの投稿が好きでした、それは非常に完全ですが、私はあなたに何かを聞きたかったです。
    このコマンドと「at」のようなコマンドで問題が発生しています。

    ある時間にスクリプトを実行して入れたい

    -f /home/mi_user/Desk/script.sh18:08の例

    スクリプトは画面上、つまりターミナルでは実行されませんが、バックグラウンドで実行されますか?

    そしてcronでも同じことが起こります。「crontab-e」でcrontabファイルを編集します。

    最後に次の行を追加します。

    46 19 my_user /home/mi_user/Desk/script.sh

    そしてそれは何もしません、それはスクリプトを示しません。

    なにか提案を? ご不便をおかけして申し訳ございません。

    1.    Linuxを使いましょう

      ターミナルを表示するには、ターミナルを実行し、スクリプトをパラメーターとして渡す必要がある場合があります。

      例えば:

      lxterminal -e "my_user /home/mi_user/Desktop/script.sh"

      使用するパラメーターは、使用するターミナルエミュレーターによって異なる場合があります。

      私はそれがうまくいくことを願っています。

      抱擁! ポール。

  10.   パトレカ

    入力が認識される。

    10点!!

    サル2!!

  11.   ロドルフォ

    どうもありがとうございました。いくつかのことを明確にするのに大いに役立ちました。詳細や質問については、MAN PAGEにアクセスし、挨拶を繰り返します。

  12.   ジャーヒル

    男はどうもありがとうございました、私は例を読んでテストしてきました。 どうもありがとうございました...それは非常に理解できます。 よろしく

  13.   Geovanni

    私はubuntuServer 12.04.2 LTSを使用し、ユーザーのジョブのリストを削除するために使用しているcrontabのバージョンであるcrontab -r(およびこのマニュアルに記載されているように-l)を使用しました。 確かにそれはバージョンの問題によるものです。

    一方、私はかつてcrontabのみを実行し、この種の方法で独自の実行ファイルを作成できましたが、これは実行されていたものではありませんでした。 実行されるのは/ etc / crontabにあるものです。 多分誰かがコメントを使うでしょう。

    PS(locate and whereis crontabで検索しましたが、前述のアドレスと暗号化された別のファイルしか返さなかったため、実行されたのが/ etc / crontab内のものであった場合、crontab -eコマンドを実行すると、私の私が定義したすべてのジョブで表示されました)このファイルはどこに保存されていましたか? ご挨拶。 私はいつもrootでログインします。

  14.   セバスチャン

    素晴らしい、とても便利です!!!

  15.   MMM

    こんにちは、私はこれをやりたいです…………«15 10 * * * root ifdowneth0»

    つまり、ある時点でネットワークカードがオフになります…………まあ、crontabに入れても、機能しませんでした……..どうしたのですか?

    ご挨拶と感謝

  16.   ミゲル

    「crontabにタスクを追加」というタイトルの後に「mon」を定義し忘れました

    記事はまだ素晴らしいです、cronは非常に便利です。

  17.   オスカー

    その良い投稿はどれほどクールでしたか、私に聞いてください
    タスクの実行によって残されたレコードを追跡したい場合、どこで確認できますか?

    このファイルの過去に行われたアクションの履歴を確認したいのですが、誰がファイルを変更したのか、日付を確認したいのです。

    感謝

  18.   オスカー

    これの変更履歴を確認したい

    どうすればいいですか

    感謝

  19.   アンドレスレド

    、おはようございます

    あなたが間違えたubuntuスクリプトで、apt-get -yupgradeの代わりにap-get-yupgradeを入れたと思います。 (あなたはtを残しました)。

    挨拶。

    1.    Linuxを使いましょう

      そうです。 ありがとうございました!
      抱擁! ポール

  20.   ガブリエル

    実行時刻やディレクトリなどを指定できるcronファイルの作り方を知りたい。

  21.   バレンティン

    cronの操作と基本的なコマンドを明確にしていただき、ありがとうございます。少し楽しませてください。

  22.   サンダー

    Gnu / Linuxに関連するトピックに関する情報を探すときはいつでも、90%のケースでこの素晴らしいコミュニティで最高のチュートリアルを見つけるために何度も行き来します。これからは、ここから始めて、他の場所から始めると思います。

    よろしく

    1.    Linuxを使いましょう

      サンダーありがとう! ハグ! ポール。

  23.   だりょう

    dom =月の日
    ダウ=曜日
    関連付けると簡単です

  24.   復活祭の

    これは非常に完全でよく説明されています。ありがとうございます。

  25.   マキシリア

    これは私のオペレーティングシステムの先生が私たちにくれたものと同じです、私は何も変更しません、今私はクラスがとても悪い理由がわかります.-。まあ、これは宿題xDと同じです

  26.   マルセロ

    親愛なる、

    クエリ、タスクの継続時間を制限できますか?
    たとえば、5分ごとに繰り返されるタスクがあります。そのタスクがまだアクティブな場合は繰り返し、タスクを強制終了して再度実行します。

    ありがとう、
    マルセロ。-

    1.    Linuxを使いましょう

      こんにちは、マルセロ!

      私たちの質疑応答サービスでこの質問を提起したほうがいいと思います FromLinuxに聞く コミュニティ全体があなたの問題を解決できるように。

      抱擁、パブロ。

  27.   aj

    良い投稿。
    crontabにタスクを追加するための端末ごとのコマンドは何ですか(crontabを入力して、「crontab -e」を使用して手動で追加したり、crontabを「crontabファイル」を使用して別のcrontabに置き換えたりする必要はありません)。
    アイデアは、タスクをcrontabに追加するための外部スクリプトを作成することです。
    感謝

    1.    デイビッド

      追加したいものは何でも「echo」を使用できるようです。 cat >> 'cronotab path(/ etc / cronotab)'«

  28.   ラファエルベラ

    式は正確に3日ごとにどのように実行されますか

  29.   ホセ·アントニオ

    ねえ。

    cronジョブの実行に問題があります。

    cronta-eを使用して次のタスクを実行します。

    01 * * **ルート/home/user/script/myfile.sh

    しかし、タスクは完了していません。 myfile.shに実行権限があり、それを実行するユーザーがrootであることを確認しました。

    / etc / crontabで同じタスクを実行しましたが、サービスを再起動した後も機能しません。
    myfile.shの内容は、DBを更新するコマンドであり、コンソールで実行すると機能します。
    問題が何であるかについて何か考えはありますか?

    1.    Fredd

      データベースユーザーがすべての権限を持っているとは限らないため、最初にデータベースエンジンから環境変数をエクスポートする必要があります。
      たとえば、db2では、この行はスクリプトの先頭に移動します
      。 /ホーム/ db2inst1 / sqllib / db2profile

      別の原因として、スクリプトでデータベースへの接続が必要な場合があります。スクリプト内でデータベースに接続してください。

  30.   LA3

    crondを再起動する必要があることを知りませんでした。しばらくの間、これと戦っていました。

  31.   ケニア

    彼らは、タスクが月末ごとに実行されていることを示す方法を知っています。指定された時間に..詳細は、毎月の最終日を取ることを私が知っている方法を達成できないということです.. ??? 一つずつ書き留めておかなければなりませんでしたが、XNUMX月末になるとビシエストになってしまうので面倒です。

  32.   イエス

    良い一日!!

    crontabで実行されているプロセスを停止するにはどうすればよいですか?

  33.   イエス

    処理する * …………

  34.   ジュリアナ

    あなたが私を助けることができるということでしょうか? minhaが作成したeutenho umスクリプトは、crontabでは機能しません。 jбdeiすべての許可、それを実行できるプライベートな特定のcronまたはユーザーはありません-ほとんど何も起こりません! あなたが私を助けることができるかどうか知りたいのですが、他のいくつかのものはcronで動作しません! Vlws

  35.   アンソックス

    月の最後の日(日:31-30-28)ごとに実行するタスクをどのように配置しますか?

  36.   テルチョ

    ご存知のように、suコマンドはコンソールでユーザーを変更するために使用されます。 コマンドsuを使用すると、「your user」はユーザーを変更しますが、「user」の適切な設定はありません。suを次のように実行すると、「su--user」はユーザー設定をロードするユーザーを変更します。 cronでユーザーを示しますが、このユーザーの設定をロードするにはどうすればよいですか?

  37.   ロブ

    そして、私がそれを止めたいのなら?

  38.   レジ

    こんにちは、
    何が間違っているのかわかりませんが、手順を実行しても何も実行されません。 私が試してみました:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    何もありません。 何も実行しません。 再起動しました。

  39.   フェルコス

    どうもありがとうございました