検索
ホームページバックエンド開発Python チュートリアルsystemd を使用して Selenium を Linux デーモンとして設定する方法

How to Set Up Selenium as a Linux Daemon with systemd

ubuntu または debian 上で Chrome と Selenium をセットアップして実行します。このガイドは ubuntu 22.04

に基づいています

Selenium は Web タスクの自動化に最適ですが、サーバー上でボットを 24 時間 365 日実行し続けるのは難しい場合があります。 systemd を使用すると、Selenium ボットをバックグラウンド サービス (デーモン) として実行でき、確実に実行され、障害時に再起動されます。このガイドでは、Linux VPS 用の構成を中心に、セットアップ手順を説明します。

目次

  1. Google Chrome のインストール

  2. 仮想環境のセットアップ

  3. 必要なパッケージのインストール

  4. Python スクリプトの作成

  5. systemd サービスのセットアップ

    • ENV 変数の追加 (オプション)
    • サービスファイル
    • サービスの実行
  6. ブロックバッファリングの問題を修正

    • -u フラグの使用
    • 印刷フラッシュ引数の使用
  7. journalctl を使用したログへのアクセス

  8. 参考資料


Google Chromeのインストール

まず、すべてのパッケージを更新します。

sudo apt update

安定した Google Chrome パッケージをダウンロードします。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

Google Chrome をインストールします。

sudo apt install -y ./google-chrome-stable_current_amd64.deb

インストールされている Google Chrome のバージョンを確認します。

google-chrome --version

仮想環境のセットアップ

マシン上で Selenium ボットのみを実行している場合、これらの手順は必須ではありません。ただし、他のプロジェクトに取り組んでいる場合や、隔離された環境が必要な場合には、これをお勧めします。

仮想環境を作成しましょう。

python3 -m venv venv

仮想環境をアクティブ化します。

source venv/bin/activate

必要なパッケージのインストール

次に、Selenium と webdriver-manager をインストールします。

pip install selenium
pip install webdriver-manager

webdriver-manger の目的は、さまざまなブラウザーのバイナリ ドライバーの管理を簡素化することです。詳細については、ドキュメントを参照してください。


Python スクリプトの作成

## main.py

from selenium import webdriver
## ---- Use for type hint ---- ##
from selenium.webdriver.chrome.webdriver import WebDriver
## --------------------------- ##
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager


def create_chrome_web_driver_connection(headless: bool,
                                       detach:bool,
                                       use_sandbox: bool,
                                       use_dev_shm: bool,
                                       window_width: int = 1052,
                                       window_height: int = 825
                                       ) -> WebDriver:

    service = Service(ChromeDriverManager().install())
    options = Options()
    options.add_experimental_option("detach", detach)
    options.add_argument(f"--window-size={window_width},{window_height}")
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-renderer-backgrounding")
    options.page_load_strategy = 'normal'

    if not use_sandbox:
        options.add_argument('--no-sandbox')
    if not use_dev_shm:
        options.add_argument('--disable-dev-shm-usage')
    if headless:
        options.add_argument("--headless=new")

    driver = webdriver.Chrome(service= service, options=options)

    return driver



if "__main__" == __name__:
    driver =  create_chrome_web_driver_connection(headless= True,
                                                 detach= False,
                                                 use_sandbox= False,
                                                 use_dev_shm= False)

    driver.get('https://python.org')
    print(driver.title)

    driver.close()

options.add_experimental_option("detach", detach) :

  • これにより、スクリプトの実行が終了した後も Chrome ブラウザを開いたままにするかどうかを構成できます。
  • detach が True の場合、WebDriver セッションが終了した後もブラウザ ウィンドウは開いたままになります。

options.add_argument(f"--window-size={window_width},{window_height}") :

  • これにより、ブラウザのウィンドウ サイズが幅と高さで設定されます。

必要に応じて、この行を削除できます。
Selenium をヘッドレス モードで実行する予定がある場合は、必ずこの方法でウィンドウ サイズを設定してください。そうしないと、私の経験では、デフォルトのウィンドウ サイズが小さすぎる可能性があります。

このコマンド driver.get_window_size() でウィンドウ サイズを確認できます

options.add_argument("--disable-extensions") :

  • 拡張機能はブラウザの自動操作を妨げる可能性があるため、拡張機能を無効にすると安定性が向上します。

options.add_argument("--disable-renderer-backgrounding") :

  • これにより、Chrome がバックグラウンド タブの優先順位を下げたり、一時停止したりすることがなくなります。
  • これは、複数のタブにまたがってアクションを実行する場合に便利です。

options.page_load_strategy = '通常' :

  • これにより、ページの読み込み戦略が通常に設定されます。つまり、Selenium はページが完全に読み込まれるまで待機してから、以降のコマンドを続行します。
  • その他のオプションには、eager (DOMContentLoaded イベントまで待機する) や none (ページのロードを待機しない) などがあります。詳細については、こちらをご覧ください。

options.add_argument('--no-sandbox') :

  • サンドボックスは、ブラウザのプロセスを分離する Chrome のセキュリティ機能です。
  • サンドボックスが権限の問題やクラッシュを引き起こす一部のテスト環境 (Docker コンテナ内や root ユーザーとしてスクリプトを実行する場合など) では、これを無効にする (--no-sandbox) と便利です。

options.add_argument('--disable-dev-shm-usage') :

  • /dev/shm は、Linux 環境でよく使用される共有メモリ空間です。デフォルトでは、Chrome はパフォーマンスを向上させるためにこれを使用しようとします。
  • これを無効にする (--disable-dev-shm-usage) と、共有メモリが制限されている環境でのクラッシュを防ぐことができます。

options.add_argument("--headless=new") :

  • これにより、GUI なしで Chrome を実行するヘッドレス モードが有効になります。
  • ヘッドレス モードは、CI/CD パイプラインやリモート サーバーなど、ディスプレイのない環境で実行する場合に便利です。

systemd サービスのセットアップ

ENV 変数の追加 (オプション)

Selenium プログラムで環境変数を使用する必要がある場合、これを実現するには 2 つの方法があります。

  1. python-dotenv などのライブラリで .env ファイルを使用する (より一般的で人気のある方法)。

  2. systemd の組み込みオプションを使用して環境ファイルをセットアップします。

この例では、2 番目のオプションを使用します。

まず、/etc ディレクトリ内に conf.d ディレクトリを作成しましょう。

sudo apt update

次に、プレーンテキストファイルを作成します(これが環境ファイルになります)。

sudo apt update

これで、作成したファイルに環境変数を追加できます。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

環境変数を使用するように Python スクリプトを変更します。

sudo apt install -y ./google-chrome-stable_current_amd64.deb

サービスファイル

この /etc/systemd/system/ ディレクトリ内にサービス ファイルを作成する必要があります。ここは、システム管理者によってインストールされた systemd ユニットが配置される場所です。

google-chrome --version

この例では、あなたが VPS にいて、root ユーザーとしてサービスを実行すると仮定します。

[!警告]
サービスは root (管理者) 権限で実行されます。これにより、システムへの完全なアクセスが許可されますが、通常、セキュリティ上の理由で必要な場合を除き、root として実行することは避けられます。

これをサービス ファイルに追加します。

python3 -m venv venv

[単位]セクション

このセクションでは、サービスのメタデータと依存関係を定義します。

Description=Selenium Bot Service : サービスの機能の簡単な説明を提供します。この場合、「Selenium Bot Service」として説明されています。この説明は、サービスを識別するためにシステム ログと systemctl によって使用されます。

After=network.target: これにより、ネットワークが利用可能になった後にのみサービスが開始されます。 network.target は、基本的なネットワーク機能が稼働していることを示す systemd ターゲットです。

[サービス]セクション

このセクションでは、サービスの実行方法、どのユーザーが実行するか、失敗した場合の対処方法など、サービス自体の構成を指定します。

User : サービスを実行するユーザーを指定します。ここではrootに設定しています。

EnvironmentFile : サービスで使用される環境変数を含むファイルを指定します。

WorkingDirectory: サービスを実行するディレクトリを指定します。これはサービス プロセスの作業ディレクトリです。ここでは、ボット ファイルは /root/selenium_bot/

に保存されています

ExecStart : サービスを開始するコマンドを定義します。ここでは、/root/selenium_bot/

にある main.py ファイルを実行します。

Restart=on-failure : サービスが失敗して終了した場合 (つまり、ゼロ以外の終了ステータス)、自動的に再起動するようにサービスを構成します。これは、時折障害が発生する場合でも、ボット サービスが確実に実行され続けるようにするのに役立ちます。

RestartSec=5s : 失敗した場合の再起動間の遅延を指定します。この場合、サービスは失敗後に再起動を試みるまで 5 秒待機します。

StandardOutput=journal : サービスの標準出力 (stdout) を systemd ジャーナルにリダイレクトします。これは、journalctl を使用して表示できます。これは、ログ記録とデバッグの目的に役立ちます。

StandardError=journal : 標準エラー (stderr) 出力を systemd ジャーナルにリダイレクトします。サービスで発生したエラーはすべてログに記録され、journalctl

を使用して表示することもできます。

[インストール]セクション

このセクションでは、サービスをいつどのように有効化または開始するかを定義します。

WantedBy=multi-user.target : サービスを有効にするターゲットを指定します。この場合、multi-user.target は、システムが非グラフィカル マルチユーザー モード (サーバーで一般的) のときに到達する systemd ターゲットです。これは、システムがこのターゲットに到達したとき、通常はシステムがマルチユーザー環境で起動したとき、サービスが開始されることを意味します。

systemd サービスで可能なすべての設定の詳細については、リファレンスを確認してください

サービスの実行

サービス ファイルが有効であることを確認してみましょう。すべてが正常であれば、何も表示されないはずです。

sudo apt update

systemd 構成をリロードして、新しいユニットまたは変更されたユニット (サービス) を探します。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

サービスを開始/再起動します。

sudo apt install -y ./google-chrome-stable_current_amd64.deb

サービスを停止してください。

google-chrome --version

サービスのステータスを確認してください。

python3 -m venv venv

起動時にサービスを自動的に開始する場合は、これを実行します。

source venv/bin/activate

ブロックバッファリングの問題の修正

Python では、対話型環境でスクリプトを実行するとき (たとえば、ターミナルで python3 filename.py を手動で実行するとき)、Python は行バッファリングを使用します。これは、print() ステートメントからの出力と同様に、出力がすぐに表示されることを意味します。

ただし、Python プログラムが非対話型環境で実行される場合 (これは今回のケースです)、出力ではブロック バッファリングが使用されます。これは、バッファがいっぱいになるかプログラムが終了するまで、プログラムは出力をバッファに保持し、ログや出力が表示されるまで遅れることを意味します。

Python の出力バッファリングの仕組みについて詳しくは、こちらをご覧ください。

ログと出力をリアルタイムで表示したいため、この問題には 2 つの方法で対処できます。

-u フラグの使用

Python3 ドキュメントにはこれが記載されています。

-u stdout ストリームと stderr ストリームのバッファリングを強制的に解除します。 このオプションは標準入力ストリームには影響しません

-u フラグを使用すると、Python は stdout と stderr の両方に対して完全なバッファなしモードで動作します。これは、各バイトが生成されるとすぐに端末 (またはログ ファイルなどの出力ストリーム) に直接送信されることを意味します。バッファリングはまったく行われません。

通常 stdout に出力されるすべての文字 (print() ステートメントやエラーなど) は、行全体やバッファーが蓄積されるのを待たずに、バイト単位で即座に書き込まれます。

このオプションを使用するには、次のようにスクリプトを実行します:

sudo apt update

このオプションを使用する場合は、サービス ファイル内の ExecStart を必ず変更してください。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

印刷フラッシュ引数の使用

Python では、print() 関数はデフォルトで出力をバッファリングします。つまり、出力はメモリに保存され、バッファがいっぱいになるかプログラムが終了した場合にのみ出力されます。 flash=True を使用すると、print() 呼び出しの直後に Python に出力を強制的にフラッシュさせ、出力がすぐに表示されるようにすることができます。

sudo apt install -y ./google-chrome-stable_current_amd64.deb

Journalctl を使用したログへのアクセス

systemd ユニット (サービス) の完全なログ履歴を表示するには、次のコマンドを使用します。

google-chrome --version

リアルタイムでログを監視するには、-f フラグを使用します。これにより、最新の日記エントリのみが表示され、日記に追加される新しいエントリが継続的に出力されます。

python3 -m venv venv

参考文献

  • https://github.com/password123456/setup-selenium-with-chrome-driver-on-ubuntu_debian
  • https://www.selenium.dev/documentation/webdriver/drivers/options/
  • https://www.lambdatest.com/blog/selenium-page-load-strategy/
  • https://pypi.org/project/webdriver-manager/
  • https://pypi.org/project/python-dotenv/
  • https://wiki.archlinux.org/title/Systemd
  • https://man.archlinux.org/man/systemctl.1
  • https://man.archlinux.org/man/systemd.service.5.en#EXAMPLES
  • https://man.archlinux.org/man/systemd-analyze.1
  • https://docs.python.org/3/using/cmdline.html#cmdoption-u
  • https://realpython.com/python-flush-print-output/
  • https://man.archlinux.org/man/journalctl.1

以上がsystemd を使用して Selenium を Linux デーモンとして設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python:自動化、スクリプト、およびタスク管理Python:自動化、スクリプト、およびタスク管理Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

Pythonと時間:勉強時間を最大限に活用するPythonと時間:勉強時間を最大限に活用するApr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター