systemd를 사용하여 Selenium을 Linux 데몬으로 설정하는 방법
Ubuntu 또는 Debian에서 Chrome 및 Selenium을 설정하고 실행합니다. 본 가이드는 우분투 22.04를 기준으로 작성되었습니다
Selenium은 웹 작업 자동화에 적합하지만 서버에서 봇을 연중무휴로 실행하는 것은 까다로울 수 있습니다. systemd를 사용하면 Selenium 봇을 백그라운드 서비스(데몬)로 실행하여 안정적으로 실행되고 실패 시 다시 시작되도록 할 수 있습니다. 이 가이드는 Linux VPS용 구성에 중점을 두고 설정 단계를 안내합니다.
목차
Google 크롬 설치
가상환경 설정
필요한 패키지 설치
Python 스크립트 생성
-
systemd 서비스 설정
- ENV 변수 추가(선택 사항)
- 서비스 파일
- 서비스 실행
-
블록 버퍼링 문제 해결
- -u 플래그 사용
- Print Flush 인수 사용
journalctl을 사용하여 로그에 액세스
참고자료
구글 크롬 설치
먼저 모든 패키지를 업데이트합니다.
sudo apt update
안정적인 Google Chrome 패키지를 다운로드하세요.
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
Google 크롬을 설치하세요.
sudo apt install -y ./google-chrome-stable_current_amd64.deb
설치된 구글 크롬 버전을 확인하세요.
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은 추가 명령을 진행하기 전에 페이지가 완전히 로드될 때까지 기다립니다.
- 다른 옵션으로는 즉시(DOMContentLoaded 이벤트가 발생할 때까지 대기) 및 없음(페이지가 로드될 때까지 기다리지 않음)이 있습니다. 자세한 내용은 여기에서 확인할 수 있습니다.
options.add_argument('--no-sandbox') :
- 샌드박스는 브라우저의 프로세스를 격리하는 Chrome의 보안 기능입니다.
- 비활성화(--no-sandbox)는 샌드박스가 권한 문제나 충돌을 일으키는 일부 테스트 환경(예: Docker 컨테이너 또는 루트 사용자로 스크립트를 실행할 때)에서 유용할 수 있습니다.
options.add_argument('--disable-dev-shm-usage') :
- /dev/shm은 Linux 환경에서 자주 사용되는 공유 메모리 공간입니다. 기본적으로 Chrome은 성능 향상을 위해 이를 사용하려고 합니다.
- 이 기능을 비활성화하면(--disable-dev-shm-usage) 공유 메모리가 제한된 환경에서 충돌을 방지할 수 있습니다.
options.add_argument("--headless=new") :
- 이렇게 하면 GUI 없이 Chrome을 실행하는 헤드리스 모드가 활성화됩니다.
- 헤드리스 모드는 CI/CD 파이프라인이나 원격 서버 등 디스플레이가 없는 환경에서 실행하는 데 유용합니다.
시스템 서비스 설정
ENV 변수 추가(선택 사항)
셀레늄 프로그램이 환경 변수를 사용해야 하는 경우 이를 달성할 수 있는 두 가지 방법이 있습니다.
python-dotenv와 같은 라이브러리와 함께 .env 파일 사용(가장 일반적이고 대중적인 방법).
systemd의 내장 옵션을 사용하여 환경 파일 설정
이 예에서는 두 번째 옵션을 사용하겠습니다.
먼저 /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/ 디렉터리 내에 서비스 파일을 생성해야 합니다. 여기에는 시스템 관리자가 설치한 시스템 장치가 배치되어야 합니다.
google-chrome --version
이 예에서는 귀하가 VPS에 있고 루트 사용자로 서비스를 실행하려고 한다고 가정합니다.
[!경고]
서비스는 루트(관리자) 권한으로 실행됩니다. 이렇게 하면 시스템에 대한 전체 액세스 권한이 부여되지만 보안상의 이유로 필요한 경우가 아니면 루트로 실행하는 것은 일반적으로 피됩니다.
서비스 파일에 추가하세요.
python3 -m venv venv
[단위] 섹션
이 섹션에서는 서비스에 대한 메타데이터와 종속성을 정의합니다.
Description=Selenium Bot Service : 서비스가 수행하는 작업에 대한 간단한 설명을 제공합니다. 이 경우에는 "Selenium Bot Service"라고 설명합니다. 이 설명은 시스템 로그 및 systemctl에서 서비스를 식별하는 데 사용됩니다.
After=network.target: 네트워크를 사용할 수 있게 된 후에만 서비스가 시작되도록 합니다. network.target은 기본 네트워킹 기능이 작동 중임을 나타내는 systemd 대상입니다.
[서비스] 섹션
이 섹션에서는 서비스 실행 방법, 실행하는 사용자, 실패할 경우 수행할 작업 등 서비스 자체의 구성을 지정합니다.
사용자 : 서비스를 실행할 사용자를 지정합니다. 여기서는 루트로 설정되어 있습니다.
EnvironmentFile : 서비스에서 사용하는 환경변수가 포함된 파일을 지정합니다.
WorkingDirectory: 서비스가 실행될 디렉터리를 지정합니다. 이는 서비스 프로세스의 작업 디렉터리입니다. 여기서 봇 파일은 /root/selenium_bot/
에 저장됩니다.ExecStart : 서비스를 시작하는 명령을 정의합니다. 여기서는 /root/selenium_bot/
에 있는 main.py 파일을 실행합니다.Restart=on-failure : 서비스가 실패(예: 0이 아닌 종료 상태)로 종료되는 경우 자동으로 다시 시작하도록 구성합니다. 이는 가끔 오류가 발생하더라도 봇 서비스가 계속 실행되도록 하는 데 유용합니다.
RestartSec=5s : 실패 시 재시작 간의 지연 시간을 지정합니다. 이 경우 서비스는 실패 후 다시 시작을 시도하기 전에 5초 동안 대기합니다.
StandardOutput=journal : 서비스의 표준 출력(stdout)을 저널ctl을 사용하여 볼 수 있는 시스템 저널로 리디렉션합니다. 이는 로깅 및 디버깅 목적에 유용합니다.
StandardError=journal : 표준 오류(stderr) 출력을 시스템 저널로 리디렉션합니다. 서비스에서 발생한 모든 오류는 기록되며 Journalctl을 사용하여 볼 수도 있습니다
[설치] 섹션
이 섹션에서는 서비스를 활성화하거나 시작하는 방법과 시기를 정의합니다.
WantedBy=multi-user.target : 서비스를 활성화해야 하는 대상을 지정합니다. 이 경우 multi-user.target은 시스템이 비그래픽 다중 사용자 모드(서버에서 일반적)일 때 도달하는 systemd 대상입니다. 이는 시스템이 이 대상에 도달하면 일반적으로 시스템이 다중 사용자 환경으로 부팅될 때 서비스가 시작된다는 것을 의미합니다.
시스템 서비스에 가능한 모든 설정에 대해 자세히 알아보려면 참조를 확인하세요
서비스 실행
서비스 파일이 유효한지 확인해 보겠습니다. 모든 것이 정상이면 아무것도 표시되지 않습니다.
sudo apt update
시스템 구성을 다시 로드하여 새롭거나 수정된 장치(서비스)를 찾습니다.
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의 출력 버퍼링 작동 방식에 대해 자세히 알아볼 수 있습니다.
로그와 출력을 실시간으로 확인하고 싶기 때문에 두 가지 방법으로 이 문제를 해결할 수 있습니다.
-u 플래그 사용
python3 문서에 이에 대한 내용이 나와 있습니다.
-u stdout 및 stderr 스트림을 강제로 버퍼링 해제합니다. 이 옵션은 stdin 스트림에 영향을 미치지 않습니다
-u 플래그를 사용하면 Python은 stdout 및 stderr 모두에 대해 완전히 버퍼링되지 않은 모드에서 작동합니다. 이는 각 바이트가 생성되자마자 터미널(또는 로그 파일과 같은 출력 스트림)로 직접 전송된다는 것을 의미합니다. 버퍼링이 전혀 발생하지 않습니다.
일반적으로 stdout으로 이동하는 모든 문자(예: print() 문 또는 오류)는 전체 라인이나 버퍼가 누적될 때까지 기다리지 않고 바이트 단위로 즉시 기록됩니다.
이 옵션을 사용하려면 다음과 같이 스크립트를 실행하세요.
sudo apt update
이 옵션을 선택하는 경우 서비스 파일 내에서 ExecStart를 수정해야 합니다.
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
Print Flush 인수 사용
Python에서 print() 함수는 기본적으로 출력을 버퍼링합니다. 즉, 출력을 메모리에 저장하고 버퍼가 가득 차거나 프로그램이 종료될 때만 출력합니다. 플러시=True를 사용하면 Python이 print() 호출 직후 출력을 플러시하도록 강제하여 출력이 즉시 표시되도록 할 수 있습니다.
sudo apt install -y ./google-chrome-stable_current_amd64.deb
Journalctl을 사용하여 로그에 액세스
시스템 장치(서비스)의 전체 로그 기록을 보려면 다음 명령을 사용하세요.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

Python은 배우고 사용하기 쉽고 C는 더 강력하지만 복잡합니다. 1. Python Syntax는 간결하며 초보자에게 적합합니다. 동적 타이핑 및 자동 메모리 관리를 사용하면 사용하기 쉽지만 런타임 오류가 발생할 수 있습니다. 2.C는 고성능 응용 프로그램에 적합한 저수준 제어 및 고급 기능을 제공하지만 학습 임계 값이 높고 수동 메모리 및 유형 안전 관리가 필요합니다.

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

파이썬은 자동화, 스크립팅 및 작업 관리가 탁월합니다. 1) 자동화 : 파일 백업은 OS 및 Shutil과 같은 표준 라이브러리를 통해 실현됩니다. 2) 스크립트 쓰기 : PSUTIL 라이브러리를 사용하여 시스템 리소스를 모니터링합니다. 3) 작업 관리 : 일정 라이브러리를 사용하여 작업을 예약하십시오. Python의 사용 편의성과 풍부한 라이브러리 지원으로 인해 이러한 영역에서 선호하는 도구가됩니다.
