sudoコマンドを含み、タイマーを使用して "crontab"実行ジョブをスケジュールするBashスクリプトを作成するにはどうすればよいですか?

sudoコマンドを含み、タイマーを使用して

私は名前付きスクリプトを実行しようとしていますscript1.sh

out="/home/me/scripts/out.txt"
sudo ntpdate 99.99.99.99 >> $out

crontabでタイマーを設定するセントース7オペレーティングシステムこれの目的は、Centos 7時間をタイムサーバーと自動的に同期させることです。

コマンドの使用

crontab –e             # (1)
sudo crontab –e        # (2)
sudo vi /etc/crontab   # (3),

各構成ファイル(1)、(2)、(3)にスケジュール定義文字列を貼り付けました。文字列は

* */1 * * *   me   /home/me/scripts/script1.sh

sudo systemctl reload crond.serviceその後、新しい設定を実装するコマンドを適用しました。

これは上記のスケジュールに従って時間script1.shごとに行う必要があります。しかし、問題はntpdateにもsudo権限が必要なので、script1.sh同じことをすることです。この問題をインターネットで検索し、sudostart editコマンドを使用して設定ファイルを編集すると、パスワードの要件を抑制できることがわかりました。次に、一番下にパスワードのないアクセスに対するいくつかの権限を追加しました。sudoersudo visudo

me   ALL=(ALL)   NOPASSWD:   /home/me/scripts/*
me   ALL=(ALL)   NOPASSWD:   /usr/sbin/ntpdate

最初は、(1)、(2)、(3)の3つすべてが定義されているときに機能します。その後、(2)と(3)の計画定義に注釈を付けてcrontabをリロードしたため、動作が停止し、sudoパスワードの入力が始まりました。その後、そのまま戻って何の効果もなかった。

質問

これを行う方法についてのヒントがありますか?それが機能するようにするにはどうすればよいですか?

ベストアンサー1

ユーザーのcrontabを介してrootを必要とするアクションをトリガーする代わりに、システムcrontabを使用する必要があります。必要 sudo、なぜならすでにルートとして実行します。

しかし、この特別な場合には技術的に言えば間違ったことをしたのです。ntpdateこれはこのように使用しないでください。時間の突然のジャンプと継続的な時計のドリフトを保証するだけです。

chronyそのため、スクリプトを破棄して適切にインストールしてください。構成 /etc/chrony.conf、活動化: sudo systemctl enable --now chronyd。 Chronyは、エラーを最小限に抑えながらクロックをNTPサーバーと同期したままにしたいデーモンです。

おすすめ記事