【スクレイピング】Pythonプログラムをサービス化し、自動起動させる方法
前回スクレイピングが出来るようにchromiumとseleniumを入れる工程をまとめました。
それは2021/01/19現在も、コピペするだけで動作する内容になっているのでもう少しパワーアップさせようと思います。
エラーで落ちたり、再起動したりすると手動で起動し直す必要がありますた。
そこで今回はもっと手軽に使えるようにするため、それをサービスとして登録し自動起動できるように設定していきます。
まずスクレイピング環境を作る
chiroru.hatenablog.com環境構築はこちらを参照して行う。
プログラムをサービス化して自動起動させる
ユニットファイルを作る
$ sudo nano /etc/systemd/system/SNS_Bot.service [Unit] Description = SNS_Bot service After=network-online.target ConditionPathExists=/opt/SNS_Bot/bin [Service] ExecStart=/opt/SNS_Bot/bin/AutoStart.sh Restart=always Type=simple StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
所有権とアクセス権を設定
$ sudo chown root:root /etc/systemd/system/SNS_Bot.service $ sudo chmod 644 /etc/systemd/system/SNS_Bot.service
作業用フォルダを作り、アクセス権を設定
$ sudo mkdir -p /opt/SNS_Bot/bin $ sudo chmod 755 /opt/SNS_Bot/bin
プログラム起動用のシェルスクリプトを作る
- -uオプションでバッファを無効にするとstatusでログを確認できる
$ sudo nano /opt/SNS_Bot/bin/AutoStart.sh #!/bin/sh exec /usr/bin/env python3 -u /opt/SNS_Bot/bin/Bot.py
所有権とアクセス権を設定
$ sudo chown root:root /opt/SNS_Bot/bin/AutoStart.sh $ sudo chmod 755 /opt/SNS_Bot/bin/AutoStart.sh
systemdを変更したため更新
$ sudo systemctl daemon-reload
サービスを動かし、問題がなければ自動起動に登録
$ sudo systemctl start SNS_Bot.service $ sudo systemctl status SNS_Bot.service #エラーが吐かなければおk $ sudo systemctl enable SNS_Bot.service
クラッシュエラーを吐いて止まった時;ChromeDriver is assuming that Chrome has crashed
--headlessオプションを付けて対処#chrome options chrome_options = Options() chrome_options.binary_location = '/usr/bin/chromium-browser' #サービスとして起動する場合はヘッドレスモードを指定する chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') #Webdriver browser = webdriver.Chrome(executable_path='/usr/bin/chromedriver',options=chrome_options)
参考にしたサイト
qiita.comRaspberry Piの可能性は凄まじい
10分あれば構築できちゃうお手軽さ、使いみち思いつかないけどもう一台欲しくなっちゃう。以上、@chiroru_27 でした。