01/10/2018, 13:42
Cách cron 1 file nodejs trên vps
bài viết cũ của em Cách tăng tốc độ chạy 1 script PHP + MySQL
em đã chuyển sang code nodejs thay cho php , em test thử trên node prompt của window thì đã thành công và rất nhanh. giờ em muốn up nó lên vps của em ngoài việc cài nodejs lên vps thành công, thì up lên và Cron cho nó chạy tự động ( như php em dùng lệnh * * * * * curl http://link ) để cron thì nodejs thì như nào ạ. EM xin cảm ơn!
VPS của e là Linux, centos 6 64 bit ạ!
Bài liên quan
Sao chạy curl lại là lệnh để script php kia trở thành cron vậy bạn??
ví dụ em có 1 file post.php để đăng bài lên fb, em vào phần crontab và thêm lệnh *.5 * * * * curl http://domain/post.php thì 5 phút nó sẽ chạy file post.php 1 lần và post ạ!!
em không nghĩ là có thể dùng dạng * * * * * curl http://domain/file.js tương tự như .php :V
chắc a chưa xài lệnh cron dùng curl kia, có nhiều lệnh như php -q , php đường dẫn đến php file nữa
Ý mình là sao phải mất công chạy curl trong khi chỉ cần gọi php cli run script đó. Việc bạn dùng curl sẽ khiến vps chịu tải thêm ≥3 process, nếu dùng php cli thì vps chỉ chịu 1 process
Cronjob nó là phần mềm giúp bạn gọi một chương trình khác có sẵn trên máy, chạy nodejs thì đặt lệnh của nodejs là được rồi, script không cần bật socket nữa mà thực hiện query luôn
Nodejs có module node-schedule để đặt lịch chạy bằng code, ko cần cronjob.
Còn muốn làm cronjob thì tạo server (= http, express, hapi… tuỳ bạn chọn 1 cái). Server đó sẽ handle request gửi tới rồi chạy file của bạn. Bạn ko thể gọi trực tiếp file .js như trên php đâu.
// đừng áp dụng kiến thức php vào nodejs, 1 số chỗ bạn sẽ thấy nó lủng củng ko đâu vào đâu, giỏi gì thì làm cái đó, đừng chạy theo phong trào.
Không phải là php gọi được file trực tiếp trên trình duyệt, mà là do cái cgi/apache/nginx nó có plugin hỗ trợ. Còn nếu viết server php qua socket bsd thì nó y hệt nodejs.
Ngược lại, nếu nodejs được nginx,… nó hỗ trợ plugin thì cũng gọi bình thường.
@lite2210
Cái này chạy ở môi trường cli mà, cần gì phải tạo server hay handle request gì?
PHP thì chạy:
php file.php
Còn Nodejs thì:
node file.js
Còn cái node-schedule muốn nó chạy job thì cũng phải để cái script nó chạy ngầm liên tục để đếm thời gian lôi cái job ra chạy. Tốn thêm tài nguyên.
Của chủ thớt đơn giản chỉ cần nhét lệnh
node file.js
vào cron job là xong (chú ý đường dẫn đến command node và file.js)Chắc chủ thớt không phân biệt được ngôn ngữ script với ngôn ngữ được compiled nên phải dùng curl để nhờ cậy web server (để cho nó thêm phần… long trọng), trong khi đó có thể gọi script chạy ngon lành mà không cần đến web server.
vậy cách cronjob tự chạy 1 file php mà không dùng lệnh curl trong crontab như thế nào ạ??
Ở phần command bạn đặt là
php <đường dẫn tuyệt đối của script php>
Node js tương tự
nó sẽ nhanh hơn dùng curl http://link ạ ?
Bạn thử so sánh việc chạy một phần mềm mà phải mở tới 4 tầng cha rồi mới gọi con và gọi nó luôn thì cái nào nhanh hơn?
Workflow của việc gọi qua webserver:
Cron -> curl -> apache -> php -> compile
EM có thể dùng module này
https://github.com/kelektiv/node-cron
bạn cài phần mềm PM2 vào con CentOS nhé. Cài xong bạn dùng lệnh pm2 start file .js là đc
Bản thân Nodejs có support Cron mà, dùng luôn của nó cần gì cron của hệ thống ?