CodeGym /コース /Docker SELF /cronとatを使ったタスクの自動化

cronとatを使ったタスクの自動化

Docker SELF
レベル 3 , レッスン 5
使用可能

cronatを使ったタスクの自動化

1. なぜ自動化が必要なの?

タスクの自動化は、Linuxを扱うシステム管理者にとっての基本中の基本だよ。自動化なしで作業を想像してみて:毎朝ターミナルにログインして、同じコマンドを入力してデータをバックアップして、アーカイブして、サーバーに送信して、古いログを削除する。1週間それを続けたら、「この仕事やめようかな...」なんて考え始めるかもね。でも違うよ!私たちはここで、マシンを忠実な仲間にする方法を教えるから。

今日の講義は時間とタスクの魔法だ。OSレベルでプロセスを自動化する方法を学ぶよ。素晴らしいcronatツールを使ってね。このツールたちは時間と時には神経まで救ってくれるんだ。

自動化は、単調なタスクを解決する救命浮き輪みたいなもの。例えば、上司のためのレポートを生成するスクリプトがあるとしよう。このレポートは毎朝8:00に必要なんだ。早起きしてスクリプトを手動で実行する代わりに(コーヒー飲んでたら忘れる可能性もあるよね)、cronを設定して自動でタスクを実行させることができるんだ。

cronは、定期的に繰り返されるタスクのためのツールだよ。
atは、特定の時刻に一度だけ実行されるタスクのためのユーティリティだ。


2. cronでの作業

cronとは何か?

cronは、バックグラウンドで動作するデーモン(システムプロセス)で、特定の時間にプログラムされたタスクを実行します。これらのタスクのスケジュールは、いわゆるcrontabというテキストファイルに保存されます。システムの各ユーザーは、自分自身のcrontabを持つことができます。

cronで最初のタスクを作成する

以下は、cronで作業する基本的なコマンドの例です:

crontab -e

このコマンドは、現在のユーザーのcrontabを編集用に開きます。スケジュールのフォーマットを指定してタスクを追加できます。

スケジュールの構文

crontabの行は6つのフィールドで構成されています:

* * * * * COMMAND
- - - - -
| | | | └─ 曜日 (0–7, 0と7は日曜日)
| | | └── 月 (1–12)
| | └─── 日付 (1–31)
| └──── 時間 (0–23)
└───── 分 (0–59)

例: 毎日正午にecho "Hello, Linux"を実行します:

0 12 * * * echo "Hello, Linux"

実践: 簡単なタスクを実行してみよう

  1. crontabを編集用に開きます:

    crontab -e
    
  2. 以下の行を追加します:

    */5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
    

    このタスクは、5分ごとに現在時刻をcron_test.logファイルに追加します。ファイルを保存して閉じてください。

  3. タスクが開始されたか確認します:

    tail -f ~/cron_test.log
    

    5分後に、ファイルで更新されたエントリを見ることができるはずです。

スケジュールされたタスクの確認

現在のタスクを確認するには:

crontab -l

タスクの削除

crontabからすべてのタスクを削除するには:

crontab -r

cronの実際の使用例

ファイルのアーカイブ

毎晩3時に/var/logsディレクトリのファイルをアーカイブしたいとします:

  1. スクリプトを作成します:

    #!/bin/bash
    tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
  2. crontabでスケジュールを設定します:

    0 3 * * * /path/to/script.sh
    

これで完了です!もうバックアップを忘れることはありません。

システム負荷の通知

例えば、CPUの負荷が80%以上の場合に通知を受け取りたいとします:

  1. スクリプトを作成します:

    #!/bin/bash
    LOAD=$(uptime | awk '{print $10}' | sed 's/,//')
    if (( $(echo "$LOAD > 0.80" | bc -l) )); then
        echo "High CPU load: $LOAD" | mail -s "CPU Alert" you@example.com
    fi
  2. スケジュールを設定します:

    */10 * * * * /path/to/cpu_check.sh
    

3. atの利用方法

atは特定の時間に一度だけタスクを実行するためのツールだよ。cronとは違って、atで設定したタスクは繰り返されないんだ。例えば「明日の朝9時にこれをやる」っていうタスクにはめっちゃ便利!

atを使った簡単なタスク

タスクを計画する例はこんな感じ:

echo "echo 'こんにちは、Linux!'" | at now + 1 minute

このコマンドはecho 'こんにちは、Linux!'を1分後に実行するよ。

正確な時間と日付を指定することもできるよ:

echo "echo 'バックアップ完了!'" | at 10:30 AM tomorrow

atタスクの管理

タスクを追加した後、その一覧を確認できるよ:

atq

出力例:

1   火 10月 31 10:30:00 2023 a user
2   火 10月 31 11:00:00 2023 a user

タスクを削除したい場合はこうする:

atrm <job_id>

実践:atを使って通知を設定

  1. 2分後に通知を出すタスクを作成しよう:

    echo "notify-send '時間だよ!'" | at now + 2 minutes
    
  2. タスク一覧を確認しよう:

    atq
    
  3. 2分後にポップアップ通知が表示されるのを待とう。


4. cronatを使う際の典型的なミス

一番よくある問題は、スクリプトやコマンドへのパスを間違えることだよね。cronは最小限の環境で実行されるから、自分の変数、例えばPATHなんかを知らないかも。ベストな方法は絶対パスを使うことだね。

例えば、Pythonスクリプトを実行したいとき:

*/30 * * * * /usr/bin/python3 /path/to/script.py

それから、スクリプトに実行権限があるか確認しよう:

chmod +x /path/to/script.sh

どこで役立つの?

自動化スキルはIT関連のほとんどの職業で必要だよ。以下のような場面で役に立つ:

  • 面倒なシステムタスクの自動化。
  • 定期的なバックアップの設定。
  • サーバーの状態モニタリング。
  • 面接でよく聞かれるcronや自動化の質問への対応。

DevOpsやシステム管理で働いている人、またはもっと生産性を上げたいって人には、cronatの理解がものすごく役立つよ。そうすれば目立てるし、時間もたくさん節約できる。

さあ、Linuxを働かせる方法を知ったね。次、誰かがルーチンタスクについて文句言ってたら、ただニヤっとして、君が自動化の達人だってことを教えてあげてね!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION