প্রতি X মিনিটে ক্রোনজব চালাবেন কীভাবে?


95

আমি ক্রোনজ্বে পিএইচপি স্ক্রিপ্ট চালাচ্ছি এবং আমি প্রতি 5 মিনিটে ইমেল পাঠাতে চাই

আমার বর্তমান (ক্রোনটব) ক্রোনজব:

10 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1

ক্রোনমেল.এফপি নিম্নরূপ:

<?php
$from = 'D'; // sender
$subject = 'S';
$message = 'M';
$message = wordwrap($message, 70);
mail("myemail@gmail.com", $subject, $message, "From: $from\n");
?>

তবে আমি এই কনফিগারেশনটি সহ 30 মিনিটের মধ্যে কোনও ইমেল পাইনি।


4
আপনার নিখুঁত পথ সম্ভবত সঠিক নয়
রেনি পট

দয়া করে আমাকে সঠিক পথের পরামর্শ দিন আমার পিএইচপি ফাইল cromail.php মূল ডিরেক্টরিতে চলেছে
সাভান পাউন

কখনও কখনও পিএইচপি-ক্লিমে কাজ করতে চায় না কারণ আপনি তারিখটি ব্যবহার না করেও আপনি php.ini এ বর্তমান সময় অঞ্চল নির্ধারণ করেন নি।
T00rk

এটা cromail.phpনাকি cronmail.php?
বিফেন

cromail.php শুধুমাত্র পরীক্ষার জন্য
সাভান পাওন

উত্তর:


170

একটি crontabফাইলের মধ্যে, ক্ষেত্রগুলি হ'ল:

  • ঘন্টা।
  • দিনের ঘন্টা
  • মাসের দিন
  • বছরের সেরা মাস.
  • সপ্তাহের দিন.

সুতরাং:

10 * * * * blah

মানে blahপ্রতি ঘন্টা 10 মিনিট আগে কার্যকর করা।

আপনি যদি প্রতি পাঁচ মিনিটে চান, তবে ব্যবহার করুন:

*/5 * * * * blah

প্রতি মিনিটে অর্থ হয় তবে কেবল প্রতি পঞ্চম এক, বা:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * blah

পুরানো cronএক্সিকিউটেবলের জন্য যা */xস্বীকৃতি বুঝতে পারে না ।

যদি এখনও মনে হয় যে এটি পরে কাজ করে না, কমান্ডটি এমন কিছুতে পরিবর্তন করুন:

date >>/tmp/debug_cron_pax.txt

এবং প্রতি পাঁচ মিনিটে কিছু লেখা হচ্ছে তা নিশ্চিত করার জন্য সেই ফাইলটি পর্যবেক্ষণ করুন। যদি তা হয় তবে আপনার পিএইচপি স্ক্রিপ্টগুলিতে কিছু সমস্যা আছে। যদি তা না হয় তবে আপনার cronডেমনটিতে কিছু সমস্যা আছে ।


আমি * / 5 * * * * mydomain.in/cronmail.php> / dev / null 2> এবং 1 ইমেল
পাচ্ছি

আমি এখানে উল্লিখিত কমান্ডটিও ব্যবহার করেছি, তবে এটি কার্যকর হয়নি কারণ এর পরে আমার একটি বিবৃতি দেওয়া হয়েছিল। বিবৃতিটি রিটার্ন এবং একটি নোটের সাথে না শেষ করার বিষয়টি নিশ্চিত করুন, যখন নতুন ক্রোন তৈরি করা হবে তখন এটি "ক্রন্টব: নতুন ক্রন্টব ইনস্টল করা" বার্তাটি দেখায়।
দমনেমন

31

আপনার সিআরএন এর মতো দেখতে হবে:

*/5 * * * *

আপনার সিআরএন সেটিংস পরীক্ষা করার দরকার হলে ক্রোনডব্লিউটিএফ সত্যই দরকারী use

লগ ফাইলে আউটপুটটি পাইপ করা ভাল ধারণা হতে পারে যাতে আপনি দেখতে পারেন যে আপনার স্ক্রিপ্টটিও কোনও ত্রুটি ফেলছে কিনা - যেহেতু আপনি সেটিকে আপনার টার্মিনালে দেখবেন না।

আপনার পিএইচপি ফাইলের শীর্ষে একটি শেবাং ব্যবহার করার চেষ্টা করুন, যাতে পিএইচপি কোথায় পাওয়া যায় তা সিস্টেম জানে। যেমন:

#!/usr/bin/php

আপনি পুরো জিনিসটি এভাবে কল করতে পারেন

*/5 * * * * php /path/to/script.php > /path/to/logfile.log


আমি আপডেট করি * / 5 * * * * mydomain.in/cronmail.php> / dev / null 2> & 1 টি ইমেল পাচ্ছে না
সাভান পাওন

4
আপনি কি ক্রোনটি দিয়ে নয়, নিজেই স্ক্রিপ্টটি চালানোর চেষ্টা করেছেন? সমস্যাটি আসলে স্ক্রিপ্টের সাথেই হতে পারে।
গ্যারি জোন্স

6

আপনি প্রতি ঘন্টা 10 মিনিটে চালানোর জন্য আপনার ক্রোন সেট করছেন।
এটিকে every 5 minsপরিবর্তন করতে সেট করতে*/5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1


আমি * / 5 * * * * mydomain.in/cronmail.php> / dev / null 2> এবং 1 ইমেল
পাচ্ছি

@ ব্যবহারকারী3705511 আপনি পিএইচপি - অনুপস্থিত usr/bin/phpঅংশের মাধ্যমে এটি চালাতে ভুলে গেছেন
জাস্টিনাস

* / 5 * * * * * usr / bin / php / mydomain.in / cronmail.php> / dev / null 2> & 1 যোগ করা হলেও এখনও ইমেল পান না
সাভান পাওন

@ ব্যবহারকারী3705511*/5 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
জাস্টিনাস

আপডেট হয়েছে তবে এখনও ইমেল পান না * / 5 * * * * ইউএসআর / বিন / পিএইচপি / mydomain.in/cronmail.php> / দেব / নাল 2> এবং 1
সাভান পাউন

5

আপনি যদি প্রতি nমিনিটে ক্রোন চালাতে চান তবে এর মান অনুসারে কয়েকটি সম্ভাব্য বিকল্প রয়েছে n

n 60 ভাগ করে (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)

এখানে, /দ্রষ্টব্যটি স্বরলিপিটি ব্যবহার করে সহজবোধ্য :

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed
m-59/n  *  *  *  *   command

উপরে সালে nমান উপস্থাপন করে nএবং mচেয়ে ছোট একটি মান প্রতিনিধিত্ব করে nবা *। এটি কয়েক মিনিটে কমান্ডটি কার্যকর করবেm,m+n,m+2n,...

n 60 ভাগ করে না

যদি n60 ভাগ না করে, আপনি ক্রোন দিয়ে পরিষ্কারভাবে এটি করতে পারবেন না তবে এটি সম্ভব। এটি করার জন্য আপনাকে ক্রোনটিতে একটি পরীক্ষা করাতে হবে যেখানে পরীক্ষা সময়টি পরীক্ষা করে। UNIX টাইমস্ট্যাম্পটি দেখার পরে এটি সর্বশ্রেষ্ঠ করা হয়, তার পর থেকে মোট সেকেন্ড 1970-01-01 00:00:00 UTC। ধরা যাক আমরা প্রথমবারের মতো কমান্ডটি চালানো শুরু করতে চাই যখন মার্টি ম্যাকফ্লাই রিভারডালে উপস্থিত হয়েছিল এবং তারপরে প্রতি nমিনিট পরে এটি পুনরাবৃত্তি করে ।

% date -d '2015-10-21 07:28:00' +%s 
1445412480

-10 422015-10-21 07:28:00 'এর পরে প্রতি nd মিনিটে ক্রোনজব চালানোর জন্য , ক্রন্টাবটি দেখতে এই রকম হবে:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed
  *  *  *  *  *   minutetestcmd "2015-10-21 07:28:00" 42 && command

সঙ্গে minutetestcmdহিসাবে সংজ্ঞায়িত করা

#!/usr/bin/env bash
starttime=$(date -d "$1" "+%s")
# return UTC time
now=$(date "+%s")
# get the amount of minutes (using integer division to avoid lag)
minutes=$(( (now - starttime) / 60 ))
# set the modulo
modulo=$2
# do the test
(( now >= starttime )) && (( minutes % modulo == 0 ))

মন্তব্য: ইউনিক্স সময় লিপ সেকেন্ড দ্বারা প্রভাবিত হয় না

মন্তব্য: cron কোন উপ-দ্বিতীয় নির্ভুলতা আছে


m/nস্বরলিপি আমার সিস্টেমে কাজ (ডেবিয়ান 9, উবুন্টু 16.04) এর মনে হচ্ছে না। শুধু */nকাজ করে। উদাহরণস্বরূপ, জন্য 5/5বা 4/10দিতে Error: bad minute; while reading /etc/crontabsyslog- র মধ্যে (ক্রন ভী দিয়ে উবুন্টু হবে। 3.0pl1-128ubuntu2)। এই মি / এন স্বরলিপিটি কি পরিত্যক্ত হয়েছে, বা এটি কেবলমাত্র কিছু সিস্টেমে উপলব্ধ?
mivk

@ এমভকে এটি নির্দেশ করার জন্য ধন্যবাদ। এটি আমার পক্ষে একটি ভুল ছিল। এটা পড়া উচিত ছিল m-59/n। কেবলমাত্র একটি ব্যাপ্তির পদক্ষেপের আকার থাকতে পারে। (দেখুন man 5 crontab) আমি উত্তরটি আপডেট করেছি
২৪: ৪৫-৩৫ এ Kantantour

3

ক্রোনজব কাজ করছে কিনা তা পরীক্ষা করার জন্য 2 টি পদক্ষেপ:

  1. ক্রোনজব চালানো ব্যবহারকারীর সাথে সার্ভারে লগইন করুন
  2. ম্যানুয়ালি পিএইচপি কমান্ড চালান:

    / usr / bin / php /mydomain.in/cromail.php

এবং কোনও ত্রুটি প্রদর্শিত হয়েছে কিনা তা পরীক্ষা করে দেখুন


3
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

X মিনিটের জন্য সেট করতে আমাদের প্রথম আর্গুমেন্টে x মিনিট সেট করতে হবে এবং তারপরে আপনার স্ক্রিপ্টের পথে

15 মিনিটের জন্য

*/15 * * * *  /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1

4
এটি প্রতিটি x (15) মিনিট ধরে চালায় না। এটি প্রতি পুরো ঘন্টা পরে x (1) মিনিটে এটি চালায়।
সিলভারডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.