以前のcrontabファイルを置き換えずにプログラムで新しいcrontabファイルを追加する方法

以前のcrontabファイルを置き換えずにプログラムで新しいcrontabファイルを追加する方法

私は、Raspberry Pi (OS -Raspbian) を使用して小規模なホームオートメーション プロジェクトに取り組んでいます。

python-crontab モジュールを使用して、以前のエントリを置き換えずに複数の crontab ファイルを追加する方法を知りたいですcrontab -e

プログラムで (手動でcrontab -eファイルを追加せずに) 2 つの Python スクリプトをスケジュールします。最初のスクリプトは 5 分ごとに実行され、もう 1 つは 2 分ごとに実行されます。

python-crontab モジュールを使用して最初のスクリプトを正常にスケジュールできましたが、2 番目のスクリプトをスケジュールすると、最初のスクリプトが置き換えられましたcrontab -e。では、以前の crontab ファイルを置き換えずに新しい crontab ファイルをスケジュールするにはどうすればよいでしょうか。

crontab のスケジュール設定の別の方法がある場合は、サンプル コードとともに提案してください :)

注: ファイルを手動で追加するのではなく、Python スクリプトのみを使用して crontab で Python スクリプトをスケジュールしたいと思いますcrontab -e

答え1

cron にエントリを追加するスクリプトを記述する場合 ( 経由でテキスト エディターを使用せずにcrontab -e)、スクリプトは次のようになります。

  • crontab -l一時ファイルを実行する
  • 最新のコマンドがすでにファイル内にあるかどうかを確認します。そうであれば停止します。
  • 最新のコマンドを一時ファイルに追加する
  • crontab一時ファイルをパラメータとして実行し、スケジュールされたコマンドを置き換えます。

参考のために:

  • crontab(1)- 個々のユーザーのcrontabファイルを管理する
  • crontab(5)- cron を駆動するためのテーブル

答え2

crontab は結局のところテキスト ファイルなので、テキストを追加すればいいのではないでしょうか。

with open("/var/spool/cron/crontabs/john", "a") as ctfile:
    ctfile.write("1 0 * * 3 /path/to/newcommand --option")

答え3

crontab -e実際には、すべての cronjobs をリストするファイルです。

入力すると、crontab -e以前の cronjobs と tildas ( ~) のリストが表示されます。

キーボードの挿入ボタンを押してモードを切り替え、最後の cron ジョブの最後に Enter キーを押します。

ティルダが消去され、ここに新しい cronjob を書き込むことができます。

挿入モードを終了するには、Esc キーを押し、Enter キーを押して:wq!変更を保存します。

関連情報