cronでsudoが必要なコマンドを実行する方法

こんにちは!ぐち(@bloguchi)です。

Linuxサーバ上でsudoが必要なコマンドをcronで定期実行する際に必要な設定をご紹介します。

cronとは

Unix系OSにおいて、記載したコマンドを定期的に実行するためにスケジュール管理を行うコマンドです。cronにて設定された処理をcron jobといいます。

cronの書き方

定期実行するコマンドを記述するために下記のコマンドを実行します。

$ crontab -e

viエディタが起動しますので下記の書式に従い定期実行するためのコマンドを記述します。

* * * * * [実行コマンド]

書式

前述の記載内容にある*の部分は定期実行するための「分」「時」「日」「月」「曜日」をそれぞれ記述します。設定可能な値は次の通りです。


  • 0-59

  • 0-23

  • 1-31

  • 1-12
  • 曜日
    0-7※0:日〜6:土、7:日

実行間隔

  • リスト指定 0,10,20,30
    分フィールドにて指定した場合は0分、10分、20分、30分で実行されます。
  • 範囲指定 1-3
    月フィールドにて指定した場合は1月、2月、3月に実行されます。
  • 共存指定 1,3,5-7
    時間フィールドにて指定した場合は1時、3時、5時、6時、7時に実行されます。
  • 間隔指定 */30
    分フィールドにて指定した場合は30分間隔で実行されます。

オプション

-e

前述した通りcrontabを編集する際に実行します。コマンド実行後はviエディタが起動しますので通常のviエディタの操作にて編集して保存してください。

-l

設定済みのcrontabを見ることができます。コマンド実行後に一覧にて表示されます。

-r

現在設定済みのcrontabを削除します。記載済みの設定が全て削除されますのでご注意ください。

cronでsudoコマンドを実行する

はい、ようやくタイトルにある通りの設定を行っていきたいと思います。

まずは下記のコマンドを実行します。

$ sudo visudo

そしてviエディタが開かれたら編集モードにして一番下まで進めます。(←僕個人の好みです。笑)下記の記述を追加し、特定ユーザーのみcronでsudoコマンドを実行可能とします。またsudoコマンドを実行する際にパスワードを問われなくする設定も合わせて行います。

Defaults:【ユーザー名】 !requiretty
【ユーザー名】 ALL=(root)   NOPASSWD: 実行コマンド

まとめ

Unix系OSで定期実行処理はよく使うと思いますが、細かい設定などをマスターしてより活用してみてはいかがでしょうか?僕はファイルのバックアップ処理の実行やログの回収などに使っています。

ただセキュリティ上良くないこともありますので、設定方法や解除するユーザーなどしっかりと考えた上で設定しましょう。

では今回はこの辺で。