2017-03-21 15 views
1

特定の時点で新しいタスクを追加するには、crontabを使用する必要があります。スクリプトを使ってこれらのタスクを追加する必要があります。私のようなものでしょう:スクリプトを使用してcrontabに新しいタスクを追加する方法

echo "command" >> /etc/crontab 

をしかし、私は、このcrontabファイルだけでrootユーザーのためのものであることを知っているので、私は使用する必要があります。

crontab -e 

は、タスクの私自身のリストを開きます。問題は、前のコマンドが一時ファイルを開き、見つけられないということです。 (これは、/ tmpまたは何かのランダムな名前を持っている?)私のようなものでしょう。私自身のcrontabリストに新しい行を書くこと

echo "5 5 5 5 5 user command" | crontab -e 

をしかし、これは動作しません。

私は何かに間違っていますか?誰かがこれを解決するためのアイデアを持っていますか?私はUbuntuを使用しています。

答えて

1

crontabは、その一時ファイルを使用して新しいコマンドを挿入するアクセス権を与えます。自分のファイルを編集したり、システムのファイルのコピーを混乱させたりすることはありません。代わりに、独自のファイルを作成してみてください。その後、私たちは** crontab -l を得て、がシステムcrontabにリストされています。

あなたは頑固であれば、あなたはのcrontab -eにストリームフィードにviのコマンドを試みることができるが、それは、物事に苦労してやっています。

これで十分ですか?

1

crontab -eはstdinから読み込まないため、現在の方法では問題があります。ただし、-eスイッチのないcrontabはstdinから読み込みます。

最も明白な方法は、単に既存のcrontabに新しいcronジョブを追加することです。このアプローチで

crontab -l > current_cron 
cat >> current_cron << EOF 
# new cron job here 
EOF 
crontab < current_cron 
rm -f current_cron 

明白な問題は、cronジョブが既に存在するかどうかを確認するには何もチェックがないことである 。それはちょっとやりにくいところです。それに取り組むため

一つの方法は、一番下に、一般的に、crontabファイルに「スクリプトの管理セクション」を持っているだろう:

# DO NOT MODIFY THE SECTION BELOW MANUALLY. IT'S MANAGED BY AUTOMATION. 
#---script managed section--- 
"cron job 1" 
"cron job 2" 

次に、スクリプトは、このセクションを管理することができます - それは持っているのがベストですすべての自動cronジョブを管理する単一のスクリプト:

crontab -l > current_cron 
sed '/---script managed section---/q' current_cron > new_cron 
cat >> new_cron << EOF 
# updated cron jobs here 
EOF 
crontab < new_cron 
rm -f new_cron current_cron 

私たちも、よりきめ細かい制御が必要な場合は、その後、私たちは開始と終了マーカーで、各管理cronジョブのためのセクションを持っているとしてスクリプトの取引を行うことができます毎回特定のセクション。

しかし、Ubuntuの方が良いアイデアがあります。私たちはcrontabを完全にやめ、代わりに/etc/cron.dを使うことができます。ここでは、各cronジョブごとに1つのファイルがあり、それはcronジョブ仕様の正確な形式に従います。 cronジョブと/etc/cron.dファイルの間には1対1の対応があるため、コマンドはcrontabコマンドではなくファイルとして直接管理されるため、自動化がはるかに容易です。Ubuntuの上man cronから

:Debianに

、cronが/etc/cron.dディレクトリ内のファイルを読み込みます。 cronは/ etc/crontabファイルと同じ方法で/etc/cron.d内のファイルを扱います(これらのファイルはそのファイルの特別なフォーマットに従います。つまり、ユーザーフィールドを含みます)。しかし、それらは/ etc/crontabから独立しています。たとえば、環境変数の設定を継承しないなどです。この変更はDebianに固有です。

関連する問題