質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

受付中

Node.jsのアプリをローカルでnode app.jsするとError: EACCES: permission denied, mkdir '/var/log/nodejs/syste

bariko
bariko

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1回答

0評価

0クリップ

65閲覧

投稿2020/06/20 05:14

編集2022/01/12 10:55

他の人が書いたNode.jsのアプリケーションを手元のMacOS(10.14.6 Mojave)のローカルで動かしてみたいのですが

terminal

$ node app.js

をすると、このようなエラーが出てしまします。

terminal

/Users/bariko/appfile/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js:45 throw err0 ^ Error: EACCES: permission denied, mkdir '/var/log/nodejs/system' at Object.mkdirSync (fs.js:914:3) at Object.mkdirsSync (/Users/bariko/appfile/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js:31:9) at DateRollingFileStream._renewWriteStream (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:225:8) at new RollingFileWriteStream (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:74:10) at new DateRollingFileStream (/Users/bariko/appfile/node_modules/streamroller/lib/DateRollingFileStream.js:23:5) at appender (/Users/bariko/appfile/node_modules/log4js/lib/appenders/dateFile.js:25:19) at Object.configure (/Users/bariko/appfile/node_modules/log4js/lib/appenders/dateFile.js:55:10) at /Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:63:27 at Object.onlyOnMaster (/Users/bariko/appfile/node_modules/log4js/lib/clustering.js:85:50) at createAppender (/Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:61:21) at /Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:77:25 at Array.forEach (<anonymous>) at setup (/Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:75:33) at /Users/bariko/appfile/node_modules/log4js/lib/configuration.js:46:33 at Array.forEach (<anonymous>) at Object.configure (/Users/bariko/appfile/node_modules/log4js/lib/configuration.js:46:13) { errno: -13, syscall: 'mkdir', code: 'EACCES', path: '/var/log/nodejs/system' }

そこで、

terminal

$ sudo cd /var/log/nodejs/system

をしてみた後に、また

terminal

$ node app.js

をすると、また同じエラーが出てしまします。
しかし、

terminal

$ sudo cd /var/log/nodejs/system

をしてみると

terminal

mkdir: /var/log/nodejs/system: File exists

となって、先ほど作ったのでそのファイルあるよ、となってしまいます。

ちなみにこのnode.jsのファイルは本番(AWS)では
nodeのバージョンが10.16.3
で動いているそうです。

私の手元のnodeは12なのでそれが良くないのでしょうか…

ずっとここでつまづいているのでアドバイスをいただけると幸いです。

どうぞよろしくお願いします。


追記

「sudo chmod 777 /var/log/nodejs/system すればとりあえず動くのでは」というご指摘を受け、

terminal

$ sudo chmod 777 /var/log/nodejs/system $ node app.js

を試してみました。

しかし、やはり以下のような同じエラーが出てしまいました。

terminal

/Users/bariko/appfile/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js:45 throw err0 ^ Error: EACCES: permission denied, mkdir '/var/log/nodejs/system' at Object.mkdirSync (fs.js:914:3) at Object.mkdirsSync (/Users/bariko/appfile/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js:31:9) at DateRollingFileStream._renewWriteStream (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:225:8) at new RollingFileWriteStream (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:74:10) at new DateRollingFileStream (/Users/bariko/appfile/node_modules/streamroller/lib/DateRollingFileStream.js:23:5) at appender (/Users/bariko/appfile/node_modules/log4js/lib/appenders/dateFile.js:25:19) at Object.configure (/Users/bariko/appfile/node_modules/log4js/lib/appenders/dateFile.js:55:10) at /Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:63:27 at Object.onlyOnMaster (/Users/bariko/appfile/node_modules/log4js/lib/clustering.js:85:50) at createAppender (/Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:61:21) at /Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:77:25 at Array.forEach (<anonymous>) at setup (/Users/bariko/appfile/node_modules/log4js/lib/appenders/index.js:75:33) at /Users/bariko/appfile/node_modules/log4js/lib/configuration.js:46:33 at Array.forEach (<anonymous>) at Object.configure (/Users/bariko/appfile/node_modules/log4js/lib/configuration.js:46:13) { errno: -13, syscall: 'mkdir', code: 'EACCES', path: '/var/log/nodejs/system' }

そこで、カレントディレクトリが、このapp.jsの親ディレクトリ(appfile)にいる状態で

terminal

$sudo chmod 777 /var/log/nodejs/system

をしたけど、もしかして/var/log/nodejs/systemってホーム直下にあるのかな、と思い、 ホームから

terminal

$cd /var/log/nodejs $ls

をしたら、やはりsystemというディレクトリがありました。
そこで/var/log/nodejs/systemをカレントディレクトリにした状態で

terminal

$sudo chmod 777 /var/log/nodejs/system

をした後に、また

terminal

$cd /Users/bariko/appfile $ node app.js

をしたところ、エラーメッセージが若干変わりました。

terminal

events.js:292 throw er; // Unhandled 'error' event ^ Error: EACCES: permission denied, open '/var/log/nodejs/system/system.log' Emitted 'error' event on DateRollingFileStream instance at: at WriteStream.<anonymous> (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:237:12) at WriteStream.emit (events.js:315:20) at /Users/bariko/appfile/node_modules/graceful-fs/graceful-fs.js:295:14 at /Users/bariko/appfile/node_modules/graceful-fs/graceful-fs.js:325:16 at FSReqCallback.oncomplete (fs.js:155:23) { errno: -13, code: 'EACCES', syscall: 'open', path: '/var/log/nodejs/system/system.log' }

今度は/var/log/nodejs/system/system.logのopenが権限がなくてできないよ、ということでしょうか…


さらに追記


「とりあえず ls -l /var/log/nodejs/system の結果を貼ってください。」ということでやってみました。

terminal

Mac:system bariko$ ls -l total 8 -rw-r--r-- 1 root wheel 174 6 20 18:55 system.log

さらにさらに追記


「$ sudo chmod 666 /var/log/nodejs/system/system.log すれば書き込めるようになって、動く」というアドバイス通りにやってみました。

terminal

Mac:system bariko$ sudo chmod 666 /var/log/nodejs/system/system.log Password: Mac:system bariko$ cd /Users/bariko/appfile Mac:appfile bariko$ node app.js

ただ、また新しいエラーが出て、以下の通り今度はaccess.logというのが開けないよ、というので

terminal

events.js:292 throw er; // Unhandled 'error' event ^ Error: EACCES: permission denied, open '/var/log/nodejs/access/access.log' Emitted 'error' event on DateRollingFileStream instance at: at WriteStream.<anonymous> (/Users/saya/technoproducerhomepage/node_modules/streamroller/lib/RollingFileWriteStream.js:237:12) at WriteStream.emit (events.js:315:20) at /Users/saya/technoproducerhomepage/node_modules/graceful-fs/graceful-fs.js:295:14 at /Users/saya/technoproducerhomepage/node_modules/graceful-fs/graceful-fs.js:325:16 at FSReqCallback.oncomplete (fs.js:155:23) { errno: -13, code: 'EACCES', syscall: 'open', path: '/var/log/nodejs/access/access.log' }

また権限をあげればいいのかな、と思い、$ls -lしてみました。

terminal

Mac:appfile bariko$ cd /var/log/nodejs/access Mac:access bariko$ ls -l total 0 -rw-r--r-- 1 root wheel 0 6 20 18:55 access.log

すると、前のsystem.logの時と同じ権限のようなので$ sudo chmod 666 /var/log/nodejs/access/access.logしてみました。

terminal

Mac:access bariko$ sudo chmod 666 /var/log/nodejs/access/access.log Mac:access bariko$ node /Users/bariko/appfile/app.js /Users/bariko/appfile/node_modules/log4js/lib/log4js.js:51 throw new Error( ^ Error: Problem reading config from file "./log4jsConfig.json". Error was ENOENT: no such file or directory, open './log4jsConfig.json' at loadConfigurationFile (/Users/saya/technoproducerhomepage/node_modules/log4js/lib/log4js.js:51:11) at Object.configure (/Users/saya/technoproducerhomepage/node_modules/log4js/lib/log4js.js:62:20) at Object.<anonymous> (/Users/saya/technoproducerhomepage/original_modules/MongoPromise.js:12:8) at Module._compile (internal/modules/cjs/loader.js:1138:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10) at Module.load (internal/modules/cjs/loader.js:986:32) at Function.Module._load (internal/modules/cjs/loader.js:879:14) at Module.require (internal/modules/cjs/loader.js:1026:19) at require (internal/modules/cjs/helpers.js:72:18) at Object.<anonymous> (/Users/saya/technoproducerhomepage/app.js:10:20) at Module._compile (internal/modules/cjs/loader.js:1138:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10) at Module.load (internal/modules/cjs/loader.js:986:32) at Function.Module._load (internal/modules/cjs/loader.js:879:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) at internal/main/run_main_module.js:17:47

これで、ちゃんと動いたよ、ということで大丈夫なのでしょうか…??

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hoshi-takanori
hoshi-takanori

2020/06/20 05:22

permission denied なのでパーミッションの問題でしょう。 sudo chmod 777 /var/log/nodejs/system すればとりあえず動くのでは。
bariko
bariko

2020/06/20 09:56

ありがとうございます。 $sudo chmod 777 /var/log/nodejs/system をした後に $ node app.js 試してみました。 やはり同じエラーが出てしまいました。。
bariko
bariko

2020/06/20 10:08

カレントディレクトリが、このapp.jsの親ディレクトリで$sudo chmod 777 /var/log/nodejs/system をしたけど、もしかして/var/log/nodejs/systemってホーム直下にあるのかな、と思い、 ホームから $cd /var/log/nodejs $ls をしたら、やはりsystemというディレクトリがありました。 (app.jsの入っている親ディレクトリにはそもそもvarというディレクトリは存在しません) そのため、/var/log/nodejs/systemで $sudo chmod 777 /var/log/nodejs/systemをやって その後にまた app.jsの親ディレクトリで$sudo chmod 777 /var/log/nodejs/system をしてみたところ、エラー内容が少し変わりました。 events.js:292 throw er; // Unhandled 'error' event ^ Error: EACCES: permission denied, open '/var/log/nodejs/system/system.log' Emitted 'error' event on DateRollingFileStream instance at: at WriteStream.<anonymous> (/Users/bariko/appfile/node_modules/streamroller/lib/RollingFileWriteStream.js:237:12) at WriteStream.emit (events.js:315:20) at/Users/bariko/appfile/node_modules/graceful-fs/graceful-fs.js:295:14 at /Users/bariko/appfile/node_modules/graceful-fs/graceful-fs.js:325:16 at FSReqCallback.oncomplete (fs.js:155:23) { errno: -13, code: 'EACCES', syscall: 'open', path: '/var/log/nodejs/system/system.log' }
bariko
bariko

2020/06/20 10:50

追記させていtだきました。 また、本のご紹介ありがとうございます。MacOS向けというところが情報いただけて非常にありがたかったです。 すぐ本屋に行って購入します!
hoshi-takanori
hoshi-takanori

2020/06/20 11:00

すでに /var/log/nodejs/system に system.log が存在して、所有者が root なので書き込めないってことですね。 とりあえず chmod 666 /var/log/nodejs/system/system.log すれば書き込めるようになって、動くと思います。 でも、そのファイルがあるってことは以前 nodejs アプリを root 権限で動かしたことがあるってことなのでは…。
bariko
bariko

2020/06/20 11:21

アドバイスありがとうございます!やった内容を追記しました。ただ…Operation not permittedと出てしまいました…
hoshi-takanori
hoshi-takanori

2020/06/20 11:23

あ、ごめんなさい。sudo chmod 666 /var/log/nodejs/system/system.log でした。 ちなみに、上記コマンドではパーミッションを変更するファイルを /var/log/nodejs/system/system.log とフルパスで指定してるので、カレントディレクトリは関係ありません。
bariko
bariko

2020/06/20 11:49

丁寧にありがとうございます!特に、 >フルパスで指定してるので、カレントディレクトリは関係ありません。 という点は知らなかったのですごくありがたい情報でした。 (今までいちいちcdで移動していました) やった内容を追記してみました!
hoshi-takanori
hoshi-takanori

2020/06/20 11:49

node app.js は app.js があるディレクトリで実行してください。そこにある設定ファイルとかライブラリとかに依存してると思うので。
bariko
bariko

2020/06/20 12:04

そうでした!ありがとうございます。 ちゃんと移動してnode app.jsをしてたのです追記しました。 MongoDBがないよ、となってしまったぽいです。。
hoshi-takanori
hoshi-takanori

2020/06/20 12:09

それは MongoDB を入れないとどうしようもありませんね。 インストールだけじゃなく、ちゃんと設定して、データベースの中身も登録しないといけないのでは。
bariko
bariko

2020/06/20 12:16

そうみたいです。あと、何やらapp.jsの書き方が非推奨になってよくないよ、と言っているので、それもローカルのnodeのバージョンを本番の10.16.3に揃えて、また動かしてみようと思います。 また進展があったら追記しますので、もしもお時間がありましたらのぞいてみてください。 お付き合いいただきありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。