লিনাক্স-এ, “আপটাইম” কখন থেকে গণনা শুরু করে?


52

আমার কম্পিউটার বলে:

$ uptime
 10:20:35 up  1:46,  3 users,  load average: 0,03, 0,10, 0,13

এবং যদি আমি পরীক্ষা lastকরি তবে আমি দেখতে পাচ্ছি:

reboot   system boot  3.19.0-51-generi Tue Apr 12 08:34 - 10:20  (01:45)    

এবং তারপরে আমি যাচাই করি:

$ ls -l /var/log/boot.log 
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log

তারপরে আমি /var/log/syslogআজকের প্রথম লাইনে দেখছি :

Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start

সুতরাং সমস্ত 8:34সময় আমার মেশিন বুট করার সময় হিসাবে রূপান্তরিত বলে মনে হয় ।

যাইহোক, আমি অবাক: সঠিক সময় uptimeব্যবহার কি? এমন uptimeএকটি প্রক্রিয়া যা কিছু ফাইল প্রবর্তন করে এবং পরীক্ষা করে বা এটি হার্ডওয়্যারে কিছু?

আমি উবুন্টু 14.04 চালাচ্ছি।


আমি নিশ্চিত যে বুট থেকে লগের শীর্ষে আপনি যে স্ট্যাম্পটি দেখেন সে সময়টি সিসলোগ ডেমন লগ হওয়ার জন্য বার্তাটি পেয়েছিল। এটি সিস্টেমটি চালিত হওয়ার সময় যেমন ছিল না তেমনি কার্নেলটি আরম্ভ করার সময় একই জিনিস নয়।
একটি সিভিএন

যতদূর আমি জানি systemd-analyze blameযে কার্নেল আরম্ভের আগে সময়টিও অন্তত ইউএফির উপর রয়েছে।
ম্যাক্স

টুপটাইমের সাথে আপনি একটি পরিষ্কার এবং সাধারণ আউটপুট পাবেন।
রেফ্রাইল

1
@ রিকার আকর্ষণীয়! তবে, আমি আমার মেশিনে এই আদেশটি খুঁজে পাচ্ছি না cannot এটা কি এই গিথুব প্রকল্প ?
ফেডরকিই

@ ফেডরকিই হ্যাঁ, এটি গিথুব . com / rfrail3 / tupটাইমে বা স্ট্রেচ বা সিডের ডেবিয়ানের ভিতরে
রেফ্রাইল

উত্তর:


79

আমার সিস্টেমে এটি থেকে আপটাইম পাওয়া যায় /proc/uptime:

$ strace -eopen uptime
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/libproc-3.2.8.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/proc/version", O_RDONLY)         = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY)          = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY)         = 4
 10:52:38 up 3 days, 23:38,  4 users,  load average: 0.00, 0.02, 0.05

প্রো ম্যানপেজ থেকে :

   /proc/uptime
          This file contains two numbers: the uptime of the system
          (seconds), and the amount of time spent in idle process
          (seconds).

প্রোক ফাইল সিস্টেমে সিউডো ফাইলের একটি সেট রয়েছে। এগুলি প্রকৃত ফাইল নয়, এগুলি কেবল ফাইলগুলির মতো দেখায় তবে এগুলির মধ্যে এমন মান রয়েছে যা সরাসরি কার্নেল দ্বারা সরবরাহ করা হয়। প্রতিবার আপনি যখন কোনও ফাইল পড়েন তবে /proc/uptimeএর বিষয়বস্তুগুলি ফ্লাইতে পুনরায় জেনারেট হয়। প্রোক ফাইল সিস্টেমটি কার্নেলের একটি ইন্টারফেস।


ফাইলের Linux kernel সোর্স কোডে fs/proc/uptime.cলাইন 49 , আপনি একটি ফাংশন কল দেখুন:

proc_create("uptime", 0, NULL, &uptime_proc_fops);

এটি প্রোক ফাইলসিস্টেম এন্ট্রি নামে পরিচিত হয় uptime(প্রকফগুলি সাধারণত নীচে মাউন্ট করা হয় /proc), এবং এর সাথে একটি ফাংশন যুক্ত করে, যা সেই সিডো ফাইলের বৈধ ফাইল অপারেশন এবং তাদের সাথে সম্পর্কিত ফাংশনগুলি সংজ্ঞায়িত করে। আপটাইমের ক্ষেত্রে এটি ন্যায়বিচার read()এবং open()ক্রিয়াকলাপ। তবে, আপনি যদি ফাংশনগুলি পিছনে সন্ধান করেন তবে আপনি এখানেই শেষ হয়ে যাবেন , যেখানে আপটাইম গণনা করা হয়।


অভ্যন্তরীণভাবে, একটি টাইমার-ইন্টারআপ্ট রয়েছে যা নিয়মিতভাবে সিস্টেমগুলি আপটাইম আপডেট করে (অন্যান্য মানগুলি ছাড়াও)। ব্যবধান, টাইমার-ইন্টারুপ্ট টিক, প্রিপ্রোসেসর-ম্যাক্রো দ্বারা সংজ্ঞায়িত করা হয় HZ, যার সঠিক মান কার্নেল কনফিগারেশন ফাইলে সংজ্ঞায়িত করা হয় এবং সংকলনের সময় প্রয়োগ করা হয়।

নিষ্ক্রিয় সময় এবং সিপিইউ চক্রের সংখ্যা, ফ্রিকোয়েনির সাথে মিলিত HZ(প্রতি সেকেন্ড চক্র) শেষ বুট হওয়ার পরে একটি সংখ্যাতে (সেকেন্ডের) গণনা করা যায়।


আপনার প্রশ্নের সমাধানের জন্য: কখন "আপটাইম" গণনা শুরু হয়?

যেহেতু আপটাইম একটি কার্নেল অভ্যন্তরীণ মান, যা প্রতিটি চক্রকে টিক দেয়, কার্নেলটি শুরু হয়ে গেলে এটি গণনা শুরু করে। অর্থাৎ যখন প্রথম চক্রটি শেষ হয়েছে। কোনও কিছু মাউন্ট করার আগেই, সরাসরি বুটলোডার কার্নেল চিত্রকে নিয়ন্ত্রণ দেয় gives


2
+1, @ চাওস, টাইমার বিঘ্নিত হ্যান্ডলার ইনস্টল হওয়ার পরে আপটাইম কাউন্টার শুরু হওয়ার বিষয়টি কি আরও সঠিক হবে? কার্নেল কি এই হ্যান্ডলারটি কনফিগার করে?
প্রেম

3
@ প্রিম এটি কার্নেল শুরুর অংশ। সময়সূচী সূচনার ঠিক আগে, টাইমার বিঘ্নটি নিবন্ধিত হবে। এটি টাইমার বিঘ্ন ঘটেছে যা শিডিয়ুলার কোডটির প্রথম পুনরাবৃত্তি বলে (কেবল একটি ফাংশন কল দিয়ে)। আপনি যদি ইন্টারেস্টেড হন তবে
বিশৃঙ্খলা

তবে কখনও কখনও কার্নেল থেকে আপটাইম মানটি সর্বদা একই থাকে না। বুট হিসাবে নয়, ফ্লাইয়ে যেমন গণনা করা হয়, যদি সার্ভারটি কিছু সময়ের সিঙ্ক চালাচ্ছে বা ভারী বোঝার মধ্যে রয়েছে তবে এই মানটি এইচজেডে স্থানান্তরিত হওয়ার কারণে পরিবর্তিত হতে পারে।
রেফ্রাইল

10

যতদিন আমি জানি, uptimeব্যবহার /proc/uptimeপদ্ধতি আপটাইম গণনা করা হবে। আপনি এটি সোর্স কোড আপটাইম সিটিতে আরও স্পষ্ট দেখতে পাচ্ছেন

  FILE *fp;

  fp = fopen ("/proc/uptime", "r");
  if (fp != NULL)
    {
      char buf[BUFSIZ];
      char *b = fgets (buf, BUFSIZ, fp);
      if (b == buf)
        {
          char *end_ptr;
          double upsecs = c_strtod (buf, &end_ptr);
          if (buf != end_ptr)
            uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
                      ? upsecs : -1);
        }

      fclose (fp);
    }

1
আমি বরং বলব যে সিডু ফাইলটি /proc/uptimeআপটাইম থেকে গণনা করা।
আরচেমার

2
এটা সত্যি না. উপরের লিঙ্কটিতে উত্স কোডটি একবার দেখুন।
Inclooder

6

একটি স্ট্যান্ডার্ড ইউনিক্স সিস্টেমে (মূল উত্সের উপর ভিত্তি করে *), রিবুট প্রবেশের শেষ সময়টি uptimeপড়ে /var/adm/utmpxএবং পরীক্ষা করে।

অন্য কথায়: এটি আপনার সাথে যে তারিখটি নিয়েছে তা পুনরুদ্ধার করছে who -bএবং তারপরে সেই সময়টিকে গণনা করবে।

*) প্রোগ্রামটির uptimeএকটি লিঙ্ক wএবং ১৯৮০ সালের দিকে বিএসডি চালু করেছিল।


আহস, আমি /var/adm/utmpxআমার সিস্টেমে খুঁজে পাচ্ছি না । আসলে, এমনকি নয়/var/adm
ফেডরকিই

3
এই জাতীয় ক্ষেত্রে, আপনি কোন ধরণের ওএস ব্যবহার করছেন তা উল্লেখ করা উচিত।
স্কিলি

আমার ভুল! এটি উবুন্টু 14.04।
ফেডরকিই

ঠিক আছে, সোলারিস, এআইএক্স, এইচপি-ইউএক্স এবং * বিএসডি-তে যেখানে মূল wবাস্তবায়ন জিনিসগুলি ব্যবহৃত হয়, তবে লিনাক্স সাধারণত কিছুটা আলাদা করে।
স্কিলি

4
আমি স্ট্যান্ডার্ড দ্বারা মনে করি , আপনি সনাতন মানে । ইউনিক্স স্ট্যান্ডার্ড uptimeকমান্ডটি নির্দিষ্ট করে না , এটি কীভাবে প্রয়োগ করা উচিত তা ছেড়ে দিন। AFAICT, OS / X এর একটি / var / ad / utmpx নেই। এবং কিছু লিনাক্স ভিত্তিক সিস্টেম ইউনিক্স-সম্মতি শংসাপত্র পেয়েছে।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.