cronjob は自動 apt メッセージを出力しません。

cronjob は自動 apt メッセージを出力しません。

私はLinuxを初めて使用しており、Raspberry Piのアップデート/アップグレードスクリプトを自動化したいと思います。これで、1分ごとに実行するように設定され、実行内容を記録していることを確認できます。後でX回ごとに実行するようにします。しかし、何も記録せず、out.logファイルも生成しません。

私が取ったステップ:

crontab -e
#I used the following line
01 * * * * root apt-get update -y && apt-get upgrade -y > /home/cronbin/out.log

次に保存します。

CTRL + X
Y
ENTER

無人アップグレードとこの記事について読みました(apt-get のアップグレードは、crontab ジョブを通じてインストールおよびアップグレードされません。)も興味深かったが、Linuxを学んだり使用したりしているので、私が何が間違っているのか、それをどのように機能させるかを調べるためにこの質問をすることにしました。

答え1

apt通常、ルートアクセスが必要なので、root crontab代わりにuser crontabRPiに配置する必要があります。sudouser crontabPIただし、これは他の多くのディストリビューションでは機能しない可能性があります。これは良い習慣ではありません。

代わりに、以下を使用してください。

sudo crontab -e 

これは編集用に開き、root crontab次のように入力できます。このコマンドは毎日午後12時に実行され、apt-get updateすべてのapt-get upgrade結果がファイルに書き込まれます/home/pi/upgrade_results.log

* 12 * * * apt-get update && sudo apt-get -y upgrade >> /home/pi/upgrade_results.log 2>&1
  • man apt-getシステムに関する最新情報と、このコマンドの使用に関するすべての重要な詳細を再確認してください。

  • 通常、ユーザーにメッセージを表示しないため、-yオプションは必要ありません。update

  • >>リダイレクト追加最新の実行結果のみが必要な場合は、ログファイルに出力してください。追加次にリダイレクト書くリダイレクト:>

  • リダイレクトは、通常の2>&1stdout1出力とすべてのstderr2)エラーメッセージを組み合わせます。これは、対話型シェルのコマンドラインからこれらのコマンドを実行した場合に端末から取得できる出力と同じです。

  • よりクローンタップマスタースケジュールを整理するのに役立ちます。

このタスクをテストするときは、cron1分間隔で実行しないでください。許可されていません両方のコマンドを実行して、完了するのに十分な時間を許可します。 IOW、あなたはこのコマンドを実行しています「お互いの上」潜在的に有害な影響を与えます。テスト目的でこのコマンドを繰り返し実行する必要があると思われる場合は、まずコマンドを「手動で」実行してから、ジョブまたはオプションを使用する必要があります-s。ジョブが実行中であることが確認されたら、コマンドからまたはオプションを削除する必要があります。--dry-runcroncron-s--dry-runapt-get

upgrade使用すると、大量の出力を生成できます。追加リダイレクト>>- 時間の経過とともにログファイルが非常に大きくなる可能性があります。定期的に確認して、ファイルを直接クリーンアップまたは削除する必要があります。ログサイズを制限する場合自動的に、そのlogrotateコマンドまたはcronログファイルを一時的な場所にパイプする他のタスクを検討し、tail-ctmp文書。

答え2

crontab -eユーザーとしてサブシェルからアップグレードを実行できますroot。重要

このように:

1 * * * * (/usr/bin/apt-get update;/usr/bin/apt-get dist-upgrade -y) >> /home/cronbin/out.log 2>&1

2>&1すべてのエラーを出力に渡します。

/var/log/cron.log/home/cronbin/out.logにどのoutoutが追加されるか(ログを入れる方が良いと思いますが)


また、時間をcrontab -e指定しなかった後も次のようになります。user

01 * * * * root
           ^^^^

/etc/cron.*/フォルダ内のスクリプトでのみユーザーを指定します。

答え3

コマンドを使用してレコードをcrontab -e編集するには、次の行を使用する必要があります。cron

1 * * * * apt-get update -y && apt-get upgrade -y > /home/cronbin/out.log

プライベートロギングを使用するときは、cronユーザー名(ルート)PSを追加しないでください。毎回再生成するのではなく、ログファイルに出力を追加することをお勧めします。これを取り替えて下さい:

> /home/cronbin/out.log

これで:

>> /home/cronbin/out.log

また、アップデートの実行に時間がかかることがあるため、1分ごとに実行するのは賢明ではありません。複数のaptプロセスがあります。合理的なアプローチは、24時間ごとにアップデート/アップグレードを実行することです。

関連情報