puppeteerをforeverでデーモン実行する

会社での昼飯はカロリーメイト。
どうも、伊藤くんです。

この度、awsEC2でpuppeteerを使ったアプリをforeverでデーモン実行しようとした時になぜか実行できなかったので、その解決策をメモしておきます。

最初に結論

puppeteer.launchに以下を追加すればforeverで動きます

const browser = await puppeteer.launch({
args: [
'--no-sandbox', // これ追加
'--disable-setuid-sandbox', // これ追加
],
});

事件簿

awsEC2(ubuntu)でpuppeteerをforeverで起動したら以下のエラーが発生しました。

Error: Failed to launch chrome!
data:    index.js:22139 - [0124/103256.284137:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported.

おを!何事ぞ!って感じでした。

というのも、forever使わず普通に「node index.js」って書けば問題なく動くのです。
これは間違いなくforeverの仕業です。foreverてめぇ…!って感じです。

解決策

↑「最初に結論」で書いた通りです。
なぜこれで直るのかよくわかりません。ごめんなさい。

ただ、この「–no-sandbox」たち、結構危険らしいので注意が必要です。
サンドボックスという、セキュリティ的な何かがブラウザに備わっているらしいのですが、そのセキュリティ的な何かを無効にする、というオプションらしいです。
これにより、メモリが破壊される可能性がどうのこうのらしいです。

こういう時怖いけどまあいいやってなる人とならない人がいますね。
伊藤くんはまあいいや派です。まあ動いてるしよくね?派です。
その辺りどのくらい危険なのかもよくわかりませんので、自分の胸によく聞いてから書いてくださいね。

ちなみに

ちなみに、puppeteerをforeverで動かすのって、別の点でも危険が潜んでいるらしいです。

browser.close()せずにプログラムが終了した場合や異常終了した場合に、chromeのプロセスが残り続けてしまうとかなんとか。
その対処法は以下のサイトなどを参考にしてみてください(とは言いつつ伊藤くんはこの辺何もしていません…)
参考 : https://tech.b-engineer.co.jp/entry/2019/02/05/111110

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です