web-dev-qa-db-ja.com

cronジョブを介してNode.jsスクリプトを実行するにはどうすればよいですか?

簡単に言えば、月に一度実行したいノードスクリプトがあります。

30 6 1 * * node /home/steve/example/script.js

しかし、おそらくパスまたはコマンドが実行されているシェルのために、これは機能しません。 cronでノードを実行する次の手段を試しました(-vでテスト済み):

steve@atom:~$ node -v
v0.4.2

steve@atom:~$ sh node -v
sh: Can't open node

steve@atom:~$ bash node -v
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file

steve@atom:~$ /usr/local/bin/node -v
v0.4.2

steve@atom:~$ sh /usr/local/bin/node -v
/usr/local/bin/node: 1: Syntax error: "(" unexpected

steve@atom:~$ bash /usr/local/bin/node -v
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file

試してみたいアイデアがなくなったのですが、何かアドバイスはありますか?

48
Steve

次のように、cronジョブでノード/usr/local/bin/nodeへのフルパスを指定するだけです。

30 6 1 * * /usr/local/bin/node /home/steve/example/script.js
90
Dan D.

さらに、#!/usr/local/bin/node実行するスクリプトの上部にあります。その後、ノードを使用してスクリプトを実行することが自動的に認識されます。ファイルも実行可能であることを確認してください。

26
Mauvis Ledford

linuxミントを使用するラップトップでは、指定されたパスが機能しないため、これを使用して回避策を講じました。

$ which node

$ /usr/bin/nodeこれは私のために働いた。

6
zabusa

スクリプト内の相対パスを絶対パスに変更するのが良いかどうかわかりません
(ファイルシステムが変更された場合、または別の環境に展開した場合はどうなりますか?)

シェルスクリプトでラップして、crontab実行でいくつかの環境変数を設定してみてください。 (具体的にはPATHNODE_PATH初心者向け)

この同様の質問に対する私の提案を試してください:
https://stackoverflow.com/a/27823675/608269

4
Marc Smith

ここでの絶対パスを使用すると、これらの回答はすべて、より大きなノードアプリの実行に大きな問題を引き起こします!

実際の完全なソリューション

cronジョブの編集

crontab -e

検索Nodeパス

which node

CDを宛先フォルダーに入れ、次にNode Path and run script)に従ってCronジョブを変更

*/2 * * * * cd /home/destination/path && /bin/node index.js

これにより、index.jsファイルの絶対パスの使用方法などのすべてのエラーなしで、完全なNodeJSアプリケーションを実行できます。

1
Curtis Xiao

ノードエイリアスと実行するファイルの絶対パスを使用します。

cronジョブの編集

crontab -e

実行するエントリNode File

これは毎分実行されます。

*/1 * * * * * /bin/node /public/test.js

完全なチュートリアル https://askmacgyver.com/blog/tutorial/how-to-run-node-scripts-from-a-cron-job

0
Timothy Moody

次のように、ユーザーcrontabの上にバイナリファイルへのパスを指定することもできます。

PATH=/bin:/usr/bin:/usr/local/bin

* * * * * cd your/path && node foo.js
* * * * * cd your/path && npm run bar
0
imbolc