web-dev-qa-db-ja.com

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

私は初めてcrontabを使用します。いくつかの非常に単純なテストcronタスクを記述して実行します。

$crontab * * * * * echo "Hi"

何も生成しません。

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

*/1: No such file or directory

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

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

13
xyz

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

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

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

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

21
Mat

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

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

  2. 非対話的に、crontab crontab.txtを使用して、ファイルからcrontabエントリをインポートするだけですcrontab.txtreplacing現在のユーザーの既存のアクティブなcrontab。

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


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

したがって、プログラムで特定のタスクを削除するを実行するには、次のようにします。

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

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

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

$ 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.txtを作成します。次に、crontab.txtファイルが現在のcrontabを置き換えます。

7
Kusalananda

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

Cronスケジュールをファイルに1行に1つのジョブで書き込み、コマンドcrontab [filename]を使用して、スクリプトの一部としてジョブをcat _filenameにして、最後に、必要に応じて最後にcrontabを呼び出します。

実際、これはman crontabヒントとして最も一般的に使用されていますfirst

2
Lindsay Ryan

Crontabをインタラクティブに変更する場合は、crontab -eコマンドを実行します。他のオプションはありません。これにより、crontabのコピーでエディターが起動します。 エディタを終了すると 、編集したコピーが新しいcrontabになります。 VISUALおよびEDITOR環境変数 を使用して、どのエディターを起動するかを制御できます。 crontabを一覧表示するには、crontab -lを実行します。

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

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

Cronジョブを編集および作成する方法とファイル構造の説明については、この crontab構文ガイド を参照してください。

2
KJS

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

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

次に:

service crond reload

crontabをリロードします。

2

以前に別のコメントで言及されていますが、以下で説明する方法を強調したいと思います。エントリをファイルに追加してから、そのファイルを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はpythonファイルを実行し、コマンドラインで 'Hello world!'を毎日午前9時に出力します。
    • 0 09 * * * python /home/user/greeting.py

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

crontab -e 

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

*/1 * * * * echo "hi"

そのファイルで。

1
user158204