web-dev-qa-db-fra.com

Comment pouvez-vous exécuter un script Node.js via un travail cron?

Tout simplement, j'ai un script de noeud que je veux exécuter une fois par mois.

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

Mais cela ne fonctionne pas, probablement à cause du chemin ou du shell sous lequel la commande est exécutée. J'ai essayé les moyens suivants pour exécuter node via cron (testé avec -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

J'ai manqué d'idées à essayer, un conseil?

39
Steve

indiquez simplement le chemin complet du noeud /usr/local/bin/node dans votre travail cron, par exemple:

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

De plus, il suffit de mettre #!/usr/local/bin/node en haut du script que vous voulez exécuter. Ensuite, il saura automatiquement exécuter le script avec noeud. Assurez-vous que le fichier est également exécutable.

24
Mauvis Ledford

Je ne sais pas si changer vos chemins relatifs dans votre script en chemins absolus est une bonne idée
(que se passe-t-il lorsque votre système de fichiers change ou que vous déployez dans un autre environnement?)

Vous pouvez essayer de l'encapsuler dans un script Shell, en définissant des variables d'environnement dans l'exécution de la crontab. (spécifiquement PATH & NODE_PATH pour les débutants)

Essayez ma suggestion pour cette question similaire:
https://stackoverflow.com/a/27823675/608269

4
Marc Smith

dans mon ordinateur portable sous Linux à la menthe, le chemin indiqué ne fonctionnait pas, alors je l'ai utilisé pour résoudre ce problème.

$ which node

$ /usr/bin/node cela a fonctionné pour moi.

2
zabusa

Utilisez des chemins absolus pour l'alias de noeud et le fichier à exécuter.

Edit Cron Jobs

crontab -e

Entrée pour exécuter notre fichier de nœud

Cela fonctionnera chaque minute.

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

Tutoriel complet https://askmacgyver.com/blog/tutorial/how-to-run-node-scripts-from-a-cron-job

0
Timothy Moody