Nếu bạn quen dùng cPanel hay cửa sổ dòng lệnh trên Linux thì dễ dàng tạo ra các cronjob. Tuy nhiên trên Windows thì cũng hơi nhằn một tý khi bạn sẽ phải quen với trình Task Scheduler. Nó thật sự ít được sử dụng nên sẽ tạo không ít khó khăn nếu không quen. Nếu không có nhu cầu cao cho cronjob muốn thực hiện thì đơn giản lắm. Mình xin chia sẻ 1 task của mình vừa thực hiện.
Cronjob là việc phép thực hiện các tác vụ một cách tự động theo định kỳ, ở chế độ nền của hệ thống. |
Task của mình có yêu cầu là gửi mail cho một danh sách khách hàng. Mình có hosting web tuy nhiên đó là hosting lưu trữ web thông thường nên mình không chắc là có hỗ trợ tối đa để… spam mail. Hosting mình mua tiền cũng không ít nên sợ chạy code gửi mail hàng loạt kiểu này dễ bị suspend nên thôi quyết định sẽ chạy local. Mình sẽ code một trang để chạy các lệnh lấy danh sách email cần gửi từ trong database rồi gửi mail. Vì số lượng mail lớn nên mỗi khi chạy lệnh gửi mình chỉ lấy một số lượng danh sách vừa đủ để hệ thống không quá tải. Code xong giờ mình sẽ tạo một cronjob và mình sẽ code bằng… html và javascript.
Mình code như sau: Mình sẽ chèn 1 iframe tải trang web chứa các lệnh cần thực hiện ví dụ ở đây sẽ là http://localhost/cronjob/send-mail.php. Xong mình sẽ dùng lệnh setInterval() với một khoảng thời gian phù hợp để thực hiện thao tác tải lại nội dung trang iframe. Code cụ thể như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <html> <script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script> <body> <script> $(document).ready(function(){ var a = 1; setInterval(function(){ var url = "http://localhost/mail-server/mail.php"; $('#page').attr('src',url); $('#number').text(a); a = a+1; }, 40000); }); </script> <p id="number">0</p> <iframe src="http://localhost/mail-server/mail.php" id="page"></iframe> </body> </html> |
Với đoạn mã ở trên thì cứ mỗi 40 giây thì nó sẽ tải lại nội dung trong iframe một lần. Bạn có thể thay giá trị thời gian với con số tính bằng milliseconds (mili giây). Ở đây mình có đặt thêm biến đếm là a để kiểm tra xem quá trình đã thực hiện được bao nhiêu lần (sau mỗi lần tải iframe sẽ tăng lên 1 đơn vị). Trong trường hợp cần truyền tham biến kiểu như số trang thì biến a cũng sẽ rất hữu dụng để bạn truyền vào.
Vậy là xong giờ bạn chỉ cần mở tập tin html này trên trình duyệt rồi để đó rồi làm việc gì làm.
Huỳnh Mai Anh Kiệt
– cron job nó đặt lịch chạy trên server 1 công việc mà không online trển clien
– Nếu làm như bạn thay cho viêc f5 lại thôi vậy thì làm cái hàm php send email ở file index rồi chèn thẻ meta refresh 5s 1 lần h
hoặc 5s ajax gọi file send email là xong
Ừ nhỉ, phải có client online script của bác chủ thớt mới chạy được.
nhờ bạn Tuấn Anh viết giúp mình cho cron nó tự chay 15 phút/lần cho địa chỉ web locall. Mình xin cảm ơn!