はじめに
Gatsbyを利用してWebサイトを作成していた際、gatsby develop
コマンドを実行時に発生したエラーの対処方法。
エラーの内容
実行したコマンド
$ gatsby develop
発生したエラー
ERROR UNHANDLED REJECTION ENOSPC: System limit for number of file watchers reached, watch '[フォルダ名省略]/gatsby-starter-blog/gatsby-config.js' Error: ENOSPC: System limit for number of file watchers reached, watch ''[フォルダ名省略]/gatsby-starter-blog/gatsby-confi g.js' - watchers:244 FSWatcher.node:internal/fs/watchers:244:19 - node:fs:2247 Object.watch node:fs:2247:34 - nodefs-handler.js:119 createFsWatchInstance [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:119:15 - nodefs-handler.js:166 setFsWatchListener [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:166:15 - nodefs-handler.js:331 NodeFsHandler._watchWithNodeFs [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:331:14 - nodefs-handler.js:395 NodeFsHandler._handleFile [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:395:23 - nodefs-handler.js:637 NodeFsHandler._addToNodeFs [gatsby-starter-blog]/[chokidar]/lib/nodefs-handler.js:637:21 - index.js:451 [gatsby-starter-blog]/[chokidar]/index.js:451:21 - async Promise.all
原因
Linuxで監視できるファイル数上限を超えているとのこと。
対処方法
案①:キャッシュを削除する
キャッシュを削除する。
$ gatsby clean
./cache
フォルダを削除する動作。
案②:ファイル数上限を上げる
以下サイトに従ってコマンドを実行。
参考資料: listen/README.md at master · guard/listen · GitHub
設定値の確認
$ cat /proc/sys/fs/inotify/max_user_watches 8192
設定値の一時的変更
$ sudo sysctl fs.inotify.max_user_watches=524288 fs.inotify.max_user_watches = 524288 $ sudo sysctl -p
永続的にパラメータを変更(私の環境では未実施)
$ sudo sh -c "echo fs.inotify.max_user_watches=524288 >> /etc/sysctl.conf" $ sudo sysctl -p
sysctl
はカーネルのパラメータを実行時に修正するのに用いるコマンド。sysctl -p [ファイル]
で指定したファイルの設定を読み込み反映する。ファイルを指定しない場合は/etc/sysctl.conf
が読み込まれる。永続的に変更する際は必須だが、一時的な変更の際はおそらくやらなくても良い。sh -c " コマンド "
はシェルスクリプトを一行だけ実行したいときに使うコマンド。echo [内容] >> [ファイル]
は内容をファイルに追加で書き込んでいる。
参考資料: sysctl - システム管理コマンドの説明 - Linux コマンド集 一覧表
おわりに
案①では解決せず、案②で一時的に設定変更することでgatsby develop
を実行できた。