簡単に言えば、月に一度実行したいノードスクリプトがあります。
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
試してみたいアイデアがなくなったのですが、何かアドバイスはありますか?
次のように、cronジョブでノード/usr/local/bin/node
へのフルパスを指定するだけです。
30 6 1 * * /usr/local/bin/node /home/steve/example/script.js
さらに、#!/usr/local/bin/node
実行するスクリプトの上部にあります。その後、ノードを使用してスクリプトを実行することが自動的に認識されます。ファイルも実行可能であることを確認してください。
linuxミントを使用するラップトップでは、指定されたパスが機能しないため、これを使用して回避策を講じました。
$ which node
$ /usr/bin/node
これは私のために働いた。
スクリプト内の相対パスを絶対パスに変更するのが良いかどうかわかりません
(ファイルシステムが変更された場合、または別の環境に展開した場合はどうなりますか?)
シェルスクリプトでラップして、crontab実行でいくつかの環境変数を設定してみてください。 (具体的にはPATH
&NODE_PATH
初心者向け)
この同様の質問に対する私の提案を試してください:
https://stackoverflow.com/a/27823675/608269
ここでの絶対パスを使用すると、これらの回答はすべて、より大きなノードアプリの実行に大きな問題を引き起こします!
実際の完全なソリューション
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アプリケーションを実行できます。
ノードエイリアスと実行するファイルの絶対パスを使用します。
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
次のように、ユーザーcrontabの上にバイナリファイルへのパスを指定することもできます。
PATH=/bin:/usr/bin:/usr/local/bin
* * * * * cd your/path && node foo.js
* * * * * cd your/path && npm run bar