crontabにエントリを追加するにはどうすればよいですか?


13

crontabを初めて使用しています。いくつかの非常に簡単なテストcronタスクを作成して実行したい。

$crontab * * * * * echo "Hi"

何も生成しません。

crontab */1 * * * * echo "hi"

と言う*/1: No such file or directory

また、現在実行中のcronタスク(自分が所有するタスクだけでなく、rootなどの他のユーザーが開始したタスク)を一覧表示するにはどうすればよいですか。

また、特定のcronタスクを削除するにはどうすればよいですか?


この参照どのように編集すると、cronジョブを作成し、ファイル構造の説明の指示のためのcrontabの構文ガイド
KJS

回答:


21

crontabそのように使用することはできません。man crontabこのユーティリティを呼び出す正しい方法について読むために使用します。

crontab -e現在のユーザーのcronエントリの編集に使用します(行を追加/変更/削除できます)。を使用crontab -lして、構成済みタスクの現在のリストを表示します。

他のユーザーのcrontabを見るということは、デフォルトのインストールでrootにならなければ不可能です。すべてを(rootとして)リストする方法については、すべてのユーザーのすべてのcronジョブをリストする方法を参照してください。

注:コマンドラインでシェルグロビング文字を使用する場合は*?特に注意してください(特に)。*は、現在のディレクトリ内のファイルのリストに展開され、予期しない結果が生じる可能性があります。*引数として何かに渡したい場合は、引用符で囲んでください('*')。


crontab -eを実行し、エディターに* / 1 * * * * echo "hi"と入力します。このファイルを保存すると、crontab:install crontabというメッセージが表示されます。しかし、画面にhiメッセージが表示されません。今何が欠けていますか?ありがとう。
xyz

2
crontabの出力は「画面」に表示されません。crontabのPOSIX manページから:「標準出力と標準エラーがcrontabエントリから実行されたコマンドによってリダイレクトされない場合、生成された出力またはエラーは実装依存の方法でユーザーにメールされます。」
マット

1
ジョブの出力は、ジョブの所有者のローカルメールボックスに送信されます。(mail設定されている場合、コマンドラインから実行するとローカルメールボックスにアクセスする必要があります。)グラフィック環境で「hi」を表示するには、タスクを次のように設定できます* * * * * export DISPLAY=:0; xmessage 'hi'
マナトワーク

@manatwork XAUTHORITYが必要な場合もありますが、これは簡単はありません
derobert

7

編集には2つの方法がありますcrontab

  1. インタラクティブに、を使用してcrontab -e、またはでcrontab指定されたエディターでを開きます、または$VISUAL$EDITOR

  2. 非対話的に、使用してcrontab crontab.txt簡単にインポートしますた、crontabファイルからエントリをcrontab.txt交換し、現在のユーザーのための既存のアクティブのcrontabを。

あなたが持っている問題は、単にcrontab間違ったコマンドを使用しているということです。


以下は、非対話型のcrontab操作に関するものです。

そのため、特定のタスクをプログラムで削除するには、次のようなことができます

$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt

where PATTERNは、削除するタスクに一致する正規表現です。ここでcrontab -lは、現在のを提供しますcrontab

または、crontab-fragment.txtアクティブなcrontabから削除したいというファイルのエントリがある場合、

$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt

これにより、現在のcrontabが読み取らcrontab-fragment.txtれ、現在のディレクトリ内のファイルでも発生する行がすべて除外されます(削除されます)(完全な文字列比較を使用)。結果が保存さcrontab.txtれ、そこからロードされて現在のcrontabが置き換えられます。

1つまたは複数のタスク追加するには、次のようにします

$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt

これはcrontab-fragment.txt、追加するエントリがファイルに含まれていることを前提としています。現在のcrontabを読み取り、そこcrontab-fragment.txtにエントリを追加してを作成しますcrontab.txtcrontab.txtファイルは、現在のcrontabを置き換えます。


2

crontabを対話形式で変更する場合crontab -eは、他のオプションなしでコマンドを実行します。これにより、crontabのコピーでエディターが開始されます。エディターを終了すると、編集されたコピーが新しいcrontabになります。あなたはを通じて開始されたエディタを制御することができますVISUALし、EDITOR環境変数。crontabをリストするには、を実行しcrontab -lます。

スクリプト内のcrontabを変更する場合は、提供されたファイルを所定の場所に変更するスクリプトまたはシェルスニペットへのパスを設定VISUALEDITORます。ここでエディターedを使用するか、またはのsed -i実装にsedこのオプションがあれば可能です。無条件に行を追加する場合は、を使用できますecho … >>。引用に注意してください。疑わしい場合は、スクリプトを作成し、スクリプトの名前をとして渡しEDITORます。

script=$(mktemp)
cat <<'EOF' >"$script"
#!/bin/sh
ed -s "$1" <<'EOS'
g/^ *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *echo "hi"$/d
$a
* * * * * echo "hi"
.
w
q
EOS
EOF

2

これは少し遅いですが、ここを探している他の人にとっては。VISUALおよびで入出力ストリームを操作するよりも簡単な方法がありますEDITOR

cronスケジュールをファイルに1行に1ジョブずつ記述するだけで、コマンドを使用してスクリプトの一部としてジョブを実行し、必要に応じて最後にcrontabを呼び出すcrontab [filename]ことができcatますfilename

実際、これは最初にman crontabリストすることによるヒントとしての最も一般的な使用です


2

crontab自動化またはコマンドラインからエントリを追加する場合は、次の操作を実行できます(希望する時間を設定します)。

echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)

次に:

service crond reload

crontabをリロードします。


これは移植性がありません。すべてのUNIXがcrontabファイルを保存するわけではありません/var/spool/cron。より良い方法は、crontab(1)コマンドを使用することです。
-thrig

それは本当かもしれないが、それはあなたがどのようにの原則示すことであったことができ、システムにそれを行うと、あなたが行で行を追加したい場合は、はい、crontabのは、トリックを行います。それは絶対的な答えであることを意図していませんでしたが、あなたの物がどこにあるかを知っていて、あなたが大量に追加する必要があるならば、それは1つでした。それが何であるかのためにそれを取る。
クリススプルースフィールド

1

次のコマンドで試してください:

crontab -e 

次に、cronジョブを追加します。

*/1 * * * * echo "hi"

そのファイルに。


0

別のコメントで以前に言及されていたとしても、以下で説明する方法を強調したいと思います。エントリをファイルに追加してから、ファイルをcrontabに追加するときに非常に便利だと思いました。そのファイルには以下の2つのエントリが含まれ、ファイル名はになりますhello-world-crontab.txt

  • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 0 09 * * * python /home/user/greeting.py

次に、以下のコマンドを実行して、これらのエントリをcrontabに追加しました。

  • $ crontab hello-world-crontab.txt

次の手順では、これらのエントリが追加されたことを確認します。

  • $ crontab -l

各エントリの機能に関する簡単な説明:

  • このcrontabエントリは「Hello world!」と書き込みます。/home/user/greeting.txt毎日午前9時にファイルに入れます。
    • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • このcrontabは、コマンドライン「Hello world!」に出力されるpythonファイルを実行します 毎日午前9時に。
    • 0 09 * * * python /home/user/greeting.py
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.