Linux ターミナルは、コマンド ラインからコンピュータ上でプログラムを実行する強力な方法です。スクリプトを使用すると、複雑なプログラミング ロジックを使用する場合でも、一般的なタスクを簡単に繰り返すことができます。
ただし、特にターミナルのファンではない場合、自動化を操作するのは厄介な場合があります。幸いなことに、Linux には、繰り返しプログラムをスケジュールする必要がある場合でも、オンデマンドで実行する必要がある場合でも、タスク管理のための便利なソリューションがいくつか用意されています。
何を自動化するのか、なぜ自動化するのか
複数回行う必要がある場合は自動化します
まず、そもそも何を自動化したいと考えますか?またその理由は何ですか?
私が苦手なことの 1 つは、ダウンロード フォルダーを空にすることです。時間が経つにつれて、それはどんどん大きくなり、最終的にはすべてを手動で削除することになります。
rm -rf ~/Downloads/*
これは問題なく機能しますが、これを実行し続けるのは面倒なので、プロセスを自動化するのが好きです。タスクを自動化すると、時間を節約できることと、タスクをより細かく制御できるようになるという 2 つの主な利点があります。ターミナルからスクリプトを実行するのは、ファイル名またはコマンドを入力して Enter キーを押すだけです。
# run a command from your PATH
clear-downloads
# run a command from a file
~/.local/bin/clear-downloads
もちろん、これは、スクリプトやプログラムに含まれる特定のコマンドを実行するよりもはるかに簡単かつ迅速です。スクリプトを使用すると、関連する機能を追加することもできます。たとえば、削除されたものの詳細をログに記録したり、サイズや経過時間に基づいてファイルをフィルターしたりできます。
複数回実行したいものはすべて自動化の対象となります。ネットワーク トラフィックの記録、ディスク使用量のレポート、ソフトウェアの更新、RSS フィードの更新などはすべて良い例です。
cronで自動化する方法
Linux でタスクをスケジュールする古典的な方法
半世紀にわたり、cron は特定の時間に実行するタスクをスケジュールする主な方法でした。 Cron は、プレーン テキストが優れており、単純な形式が最適であるという古典的な Unix の原則に忠実です。
crontab ファイルには、実行するタスクのリストが含まれており、それぞれの形式は次のとおりです。
m h d o w
この形式では、m (分)、h (時)、d (日)、o (月)、および w (曜日) はタスクをいつ実行するかを定義する数値であるため、次のような行を使用して毎週金曜日の 10:00 にタスクを実行するように設定できます。
* 10 * * 5 /Users/bobby/.local/bin/clear-downloads
cron は耐え続けてきましたが、批判者もいます。構文は必ずしも覚えやすいわけではなく、理解することさえ簡単ではありません。cron が実行される環境は明確ではなく、トラブルシューティングが難しい場合があり、タスクは時刻に厳密に関連付けられています。 Cron は単純なジョブには適切なツールですが、より強力で改良された代替ツール、systemd があります。
systemd で自動化する方法とそれが優れている理由
cron が行うすべての機能やその他の機能を提供します
systemd ソフトウェアは、サービス管理に対するより現代的なアプローチであり、cron の機能に加えて、さらに多くの機能を実行します。これを使用してスクリプトをスケジュールすることもできますが、systemd はシステム プロセス、ブート管理、イベント ログ、およびネットワーク解決も処理します。
systemd タスクは cron エントリよりも初期設定が少し必要ですが、作成してしまえばずっと使いやすくなります。簡単な例として、/home/bobby/scripts/clear-docs.sh にスクリプトがあると想像してください。
#!/bin/sh
# Remove everything. Can be modified to remove only a certain number of files,
# only files above a certain size, files older than a certain age, etc.
rm --recursive --force --verbose ~/Documents/*
これをスケジュールされた systemd タスク (タイマーと呼ばれる) としてインストールするには、/etc/systemd/system/clear-docs.service に付随ファイルを作成します。
(Unit)
Description=Cleans out the Documents directory as a demo of systemd timers
Wants=clear-docs.timer
(Service)
User=bobby
Group=bobby
Type=oneshot
ExecStart=/home/bobby/scripts/clear-docs.sh
(Install)
WantedBy=multi-user.target
このファイルの形式は Windows の .ini ファイル形式に非常によく似ており、見出しセクションが括弧で囲まれ、各行に名前と値のペアが含まれていることに注意してください。
Wants= ディレクティブは、systemd が cron よりもさらに進化していることを示す良い例です。別のユニットへの依存関係を指定します。これは、/etc/systemd/system/clear-docs.timer にある別のファイルに作成できます。
(Unit)
Description=Timer for: clear-docs.service
Requires=clear-docs.service
(Timer)
Unit=clear-docs.service
# Run the timer, every hour, on the hour
OnCalendar=*-*-* *:00:00
(Install)
WantedBy=timers.target
このタイマー定義は OnCalendar ディレクティブを使用します。これは cron が各コマンドをスケジュールするために使用するプレフィックスに似ています。ただし、systemd ソフトウェアは非常に高い柔軟性を備えています。「起動後 10 分」 (OnBootSec=10min) などの相対時間や、特定のファイルが変更されたときなど、時間に関係のないイベントに応答するように自動化を設定できます。
これらのファイルが作成されたら、systemd を再起動して新しいサービスを開始することでセットアップを完了できます。
sudo systemctl daemon-reload
sudo systemctl enable clear-docs.timer
sudo systemctl start clear-docs.timer
この時点で、タイマーをクエリすることで、すべてが稼働していることを確認できます。
systemctl status clear-docs.timer
返される情報には、タイマーが開始された時刻と次にトリガーされる時刻が含まれることに注意してください。
サービスにクエリを実行すると、スクリプト ファイルの詳細と簡単なログが得られます。
GUI で systemd を制御する
これらのアプリのいずれかを使用すると、自動化に簡単にアクセスできます
難しい作業は不要になり、Systemd Manager などのフロントエンド アプリを使用して個々の systemd サービスを制御できます。
この GTK ベースのアプリでは、サービスの表示、個々のユニットの有効化、自動化ファイルの編集が可能です。また、ログを確認して、システムの起動にかかる時間を分析することもできます。
日常的に使用する場合は、より簡単な代替手段である同じ名前の GNOME 拡張機能を好みます。これにより、トップ パネルにドロップダウンが追加され、含めることを選択できる個別のサービスが表示されます。
この拡張機能を使用すると、わずか 2 回のクリックでサービスを開始、停止、再起動できます。いつでも利用できるため、通常は特定の時間にスケジュールされている自動化であっても、自動化を実行するために端末の近くに行く必要はありません。オンデマンドでジョブを実行すると、ジョブのデバッグに役立ちます。systemd を使用すると、これが cron よりもはるかに簡単になります。
比類のない柔軟性を実現するには systemd が最適です
誰もが systemd のファンというわけではありませんが、その理由はわかります。 cron を使って育った人にとって、cron の学習曲線はより急峻であり、その複雑さは必ずしも Linux の原則に従っているわけではありません。
ただし、ログ機能などの高度な機能が組み込まれており、制御された環境で実行されるスケジュールされたタスクの利点は否定できません。ワンクリックのコントロールとターミナル不要のエクスペリエンスを提供する GUI アプリのサポートにより、systemd を使用する価値は十分にあります。
このテーマについてさらに詳しく知りたい方は以下をご覧ください