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

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

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

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

JavaScript

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

Q&A

1回答

2290閲覧

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

bariko

総合スコア31

Node.js

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

JavaScript

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

0グッド

0クリップ

投稿2020/06/20 05:14

編集2020/06/20 12:03

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

terminal

1$ node app.js

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

terminal

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

そこで、

terminal

1$ sudo cd /var/log/nodejs/system

をしてみた後に、また

terminal

1$ node app.js

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

terminal

1$ sudo cd /var/log/nodejs/system

をしてみると

terminal

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

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

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

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

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

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


追記

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

terminal

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

を試してみました。

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

terminal

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

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

terminal

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

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

terminal

1$cd /var/log/nodejs 2$ls

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

terminal

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

をした後に、また

terminal

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

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

terminal

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

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


さらに追記


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

terminal

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

さらにさらに追記


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

terminal

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

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

terminal

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

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

terminal

1Mac:appfile bariko$ cd /var/log/nodejs/access 2Mac:access bariko$ ls -l 3total 0 4-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

1Mac:access bariko$ sudo chmod 666 /var/log/nodejs/access/access.log

またnode app.jsしてみました

そして、ちゃんとcd /Users/bariko/appfileに移動してからnode app.jsしてみました。

terminal

1Mac:access bariko$ cd /Users/bariko/appfile 2Mac:access bariko$ node app.js 3(node:37669) UnhandledPromiseRejectionWarning: Error: querySrv ENOTFOUND _mongodb._tcp.undefined.mongodb.net 4 at QueryReqWrap.onresolve [as oncomplete] (dns.js:203:19) 5(node:37669) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) 6(node:37669) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

mongoDBないんですけど、となってしまいました。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/06/20 05:22

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

2020/06/20 09:56

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

2020/06/20 10:50

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

2020/06/20 11:21

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

2020/06/20 11:23

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

2020/06/20 11:49

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

2020/06/20 11:49

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

2020/06/20 12:04

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

2020/06/20 12:09

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

2020/06/20 12:16

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

回答1

0

mkdir で作成しようとするのはディレクトリです
で、/var/log/nodejs/systemってのはファイルじゃないですか?

投稿2020/06/20 05:17

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bariko

2020/06/20 10:23

エラーメッセージが以下のように出るので、app.jsがmkdirしたいけど権限がなくてできなかったよ、ということではあありませんか? errno: -13, syscall: 'mkdir', code: 'EACCES', path: '/var/log/nodejs/system'
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問