私は名前付きスクリプトを実行しようとしています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
同じことをすることです。この問題をインターネットで検索し、sudo
start editコマンドを使用して設定ファイルを編集すると、パスワードの要件を抑制できることがわかりました。次に、一番下にパスワードのないアクセスに対するいくつかの権限を追加しました。sudoer
sudo 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サーバーと同期したままにしたいデーモンです。