cron
とat
を使ったタスクの自動化
1. なぜ自動化が必要なの?
タスクの自動化は、Linuxを扱うシステム管理者にとっての基本中の基本だよ。自動化なしで作業を想像してみて:毎朝ターミナルにログインして、同じコマンドを入力してデータをバックアップして、アーカイブして、サーバーに送信して、古いログを削除する。1週間それを続けたら、「この仕事やめようかな...」なんて考え始めるかもね。でも違うよ!私たちはここで、マシンを忠実な仲間にする方法を教えるから。
今日の講義は時間とタスクの魔法だ。OSレベルでプロセスを自動化する方法を学ぶよ。素晴らしいcron
とat
ツールを使ってね。このツールたちは時間と時には神経まで救ってくれるんだ。
自動化は、単調なタスクを解決する救命浮き輪みたいなもの。例えば、上司のためのレポートを生成するスクリプトがあるとしよう。このレポートは毎朝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"
実践: 簡単なタスクを実行してみよう
crontab
を編集用に開きます:crontab -e
以下の行を追加します:
*/5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
このタスクは、5分ごとに現在時刻を
cron_test.log
ファイルに追加します。ファイルを保存して閉じてください。タスクが開始されたか確認します:
tail -f ~/cron_test.log
5分後に、ファイルで更新されたエントリを見ることができるはずです。
スケジュールされたタスクの確認
現在のタスクを確認するには:
crontab -l
タスクの削除
crontab
からすべてのタスクを削除するには:
crontab -r
cron
の実際の使用例
ファイルのアーカイブ
毎晩3時に/var/logs
ディレクトリのファイルをアーカイブしたいとします:
スクリプトを作成します:
#!/bin/bash tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
crontab
でスケジュールを設定します:0 3 * * * /path/to/script.sh
これで完了です!もうバックアップを忘れることはありません。
システム負荷の通知
例えば、CPUの負荷が80%以上の場合に通知を受け取りたいとします:
スクリプトを作成します:
#!/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
スケジュールを設定します:
*/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
を使って通知を設定
2分後に通知を出すタスクを作成しよう:
echo "notify-send '時間だよ!'" | at now + 2 minutes
タスク一覧を確認しよう:
atq
2分後にポップアップ通知が表示されるのを待とう。
4. cron
とat
を使う際の典型的なミス
一番よくある問題は、スクリプトやコマンドへのパスを間違えることだよね。cron
は最小限の環境で実行されるから、自分の変数、例えばPATH
なんかを知らないかも。ベストな方法は絶対パスを使うことだね。
例えば、Pythonスクリプトを実行したいとき:
*/30 * * * * /usr/bin/python3 /path/to/script.py
それから、スクリプトに実行権限があるか確認しよう:
chmod +x /path/to/script.sh
どこで役立つの?
自動化スキルはIT関連のほとんどの職業で必要だよ。以下のような場面で役に立つ:
- 面倒なシステムタスクの自動化。
- 定期的なバックアップの設定。
- サーバーの状態モニタリング。
- 面接でよく聞かれる
cron
や自動化の質問への対応。
DevOpsやシステム管理で働いている人、またはもっと生産性を上げたいって人には、cron
やat
の理解がものすごく役立つよ。そうすれば目立てるし、時間もたくさん節約できる。
さあ、Linuxを働かせる方法を知ったね。次、誰かがルーチンタスクについて文句言ってたら、ただニヤっとして、君が自動化の達人だってことを教えてあげてね!
GO TO FULL VERSION