Linux ターミナルを触らずに使用する方法: 究極の自動化の秘密

in tech

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 ファイル。各エントリには頻度を定義する一連の数値と、指定された時間に実行されるコマンドが含まれます。

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

返される情報には、タイマーが開始された時刻と次にトリガーされる時刻が含まれることに注意してください。

systemd タイマーの開始時刻と、5 分以内にトリガーされることを示すステータス情報。

サービスにクエリを実行すると、スクリプト ファイルの詳細と簡単なログが得られます。

systemd サービスのステータス。実行されるスクリプトへのパスと詳細のログが表示されます。

GUI で systemd を制御する

これらのアプリのいずれかを使用すると、自動化に簡単にアクセスできます

難しい作業は不要になり、Systemd Manager などのフロントエンド アプリを使用して個々の systemd サービスを制御できます。

1 つの列にサービスのリストが表示され、メイン パネルにユニット ファイルの詳細が表示される Systemd Manager アプリ。

この GTK ベースのアプリでは、サービスの表示、個々のユニットの有効化、自動化ファイルの編集が可能です。また、ログを確認して、システムの起動にかかる時間を分析することもできます。

日常的に使用する場合は、より簡単な代替手段である同じ名前の GNOME 拡張機能を好みます。これにより、トップ パネルにドロップダウンが追加され、含めることを選択できる個別のサービスが表示されます。

この拡張機能を使用すると、わずか 2 回のクリックでサービスを開始、停止、再起動できます。いつでも利用できるため、通常は特定の時間にスケジュールされている自動化であっても、自動化を実行するために端末の近くに行く必要はありません。オンデマンドでジョブを実行すると、ジョブのデバッグに役立ちます。systemd を使用すると、これが cron よりもはるかに簡単になります。


比類のない柔軟性を実現するには systemd が最適です

誰もが systemd のファンというわけではありませんが、その理由はわかります。 cron を使って育った人にとって、cron の学習曲線はより急峻であり、その複雑さは必ずしも Linux の原則に従っているわけではありません。

ただし、ログ機能などの高度な機能が組み込まれており、制御された環境で実行されるスケジュールされたタスクの利点は否定できません。ワンクリックのコントロールとターミナル不要のエクスペリエンスを提供する GUI アプリのサポートにより、systemd を使用する価値は十分にあります。

このテーマについてさらに詳しく知りたい方は以下をご覧ください

完全ガイドはこちら

関連記事

前の投稿
このスライサー トリックにより、3D プリントにかかる時間とお金を節約できます
次の投稿
Galaxy Watch で常時表示ディスプレイを使用すると実際にバッテリーが節約される理由は次のとおりです