私は初めてcrontabを使用します。いくつかの非常に単純なテストcronタスクを記述して実行します。
$crontab * * * * * echo "Hi"
何も生成しません。
crontab */1 * * * * echo "hi"
*/1: No such file or directory
。
また、現在実行中のcronタスク(自分が所有しているタスクだけでなく、rootなどの他のユーザーが開始したタスク)を一覧表示するにはどうすればよいですか。
また、特定のcronタスクを削除するにはどうすればよいですか?
crontab
をそのように使用することはできません。このユーティリティを呼び出す正しい方法について読むには、man crontab
を使用してください。
crontab -e
を使用して、現在のユーザーのcronエントリを編集する必要があります(行を追加/変更/削除できます)。 crontab -l
を使用して、構成済みタスクの現在のリストを表示します。
他のユーザーのcrontabを表示することに関しては、デフォルトのインストールでrootにならないとそれは不可能です。 (rootとして)すべてをリストするいくつかの方法については すべてのユーザーのすべてのcronジョブをリストする方法 を参照してください。
注:コマンドラインでシェルグロビング文字を使用する場合は特に注意してください(特に*
および?
)。 *
は、現在のディレクトリにあるファイルのリストに展開され、予期しない影響が生じる可能性があります。 *
を引数として何かに渡したい場合は、引用符で囲んでください('*'
)。
crontab
を編集するには2つの方法があります。
インタラクティブにcrontab -e
を使用して、$VISUAL
または$EDITOR
で指定されたエディターでcrontab
を開きます。または
非対話的に、crontab crontab.txt
を使用して、ファイルからcrontab
エントリをインポートするだけですcrontab.txt
、replacing現在のユーザーの既存のアクティブな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を置き換えます。
これは少し遅いですが、ここを見る他の人にとっては。 VISUAL
およびEDITOR
を使用して入出力ストリームを操作するよりも簡単な方法があります。
Cronスケジュールをファイルに1行に1つのジョブで書き込み、コマンドcrontab [filename]
を使用して、スクリプトの一部としてジョブをcat
_filename
にして、最後に、必要に応じて最後にcrontabを呼び出します。
実際、これはman crontab
ヒントとして最も一般的に使用されていますfirst
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構文ガイド を参照してください。
自動化またはコマンドラインからcrontab
にエントリを追加する場合は、次のようにできます(希望する時間を設定します)。
echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)
次に:
service crond reload
crontabをリロードします。
以前に別のコメントで言及されていますが、以下で説明する方法を強調したいと思います。エントリをファイルに追加してから、そのファイルを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
各エントリの機能に関する簡単な説明:
/home/user/greeting.txt
に毎日午前9時。0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
0 09 * * * python /home/user/greeting.py
次のコマンドで試してください:
crontab -e
次に、cronジョブを追加します。
*/1 * * * * echo "hi"
そのファイルで。