ক্রোন চলমান কমান্ড (systemctl স্থগিত)


12

আমার এই ক্রোনজব সেট আছে:

* * * * * /usr/bin/systemctl suspend

এবং এটি কাজ করছে না। তবে আমি এটি একটি শেল চালাতে পারি এবং এটি কাজ করে। আমি বুঝতে পারছি না কী কাজ করতে পারে না।

এডিটি পুনর্নির্দেশ ত্রুটি আউটপুট এটি /tmp/errorদেয়:

Failed to issue method call: Access denied
Failed to issue method call: Access denied

আমার প্রশ্নটি তখন: ক্রোনজবসগুলি কি কোনও বিশেষ ব্যবহারকারী হিসাবে চালিত হয় ( cronউদাহরণস্বরূপ), যা ব্যাখ্যা করবে যে আমার ব্যবহারকারী কমান্ডটি চালাতে পারে, তবে cronনিজেই নয়?

অতিরিক্ত ব্যাখ্যা:

  • স্ক্রিপ্টে আমার যে সমস্যা রয়েছে তা দেখানোর এটি একটি ন্যূনতম উদাহরণ (এটি এখানে প্রদত্ত একক কমান্ডের চেয়ে বেশি বোঝায়)

  • systemctlএর অংশ systemd। আমি মনে করি রিবুট, শাটডাউন, সাসপেন্ড একটি নন-রুট ব্যবহারকারীর সাথে কাজ করছে systemd। যাইহোক, এটি আমার সিস্টেমে কাজ করছে।

  • অবশেষে, আমি আর্চ লিনাক্স ব্যবহার এবং /bin, /usr/sbin, /sbinসকল symlinks হয় /usr/bin


1
আপনি এখানে কি করতে চেষ্টা করছেন? শেলটি চালানোর সময় কমান্ডটি কী করবে?
টেরডন

এটি আমার কম্পিউটারটিকে স্থগিত করে
গ্রেডিয়েন্ট

এবং আপনি কি প্রতি মিনিটে এটি ঘটতে চান? আপনার systemctlভিতরে আছে /usr/binএবং এটি কি suspendএইভাবে গ্রহণ করে? আপনি কি * নিক্স ব্যবহার করছেন?
টেরডন

1
না, এটি একটি উদাহরণ। এটি আসলে এমন স্ক্রিপ্টে রয়েছে যা ব্যাটারি শক্তি কম হলে স্থগিত করে। তবে এটি আমার স্ক্রিপ্টের অংশ যা কাজ করছে না। আমি সমস্যার একটি ন্যূনতম উদাহরণ দেওয়ার চেষ্টা করেছি (এমনকি যদি এটি বোধ হয় না)।
গ্রেডিয়েন্ট

2
ঠিক আছে, যেহেতু এই প্রশ্নটি নিকট-ভোট সংগ্রহ করছে, দয়া করে এই অতিরিক্ত তথ্য যুক্ত করতে এটি সম্পাদনা করুন। আপনার ডিস্ট্রো গুরুত্বপূর্ণ ( systemctl suspendদেবিয়ান বা রেডহ্যাট ডিস্ট্রোজে কাজ করে না) এবং তাই বোঝানো হচ্ছে যে আপনি যা প্রদর্শন করছেন তা আসলে আপনি করতে চান না :)। এছাড়াও, 2> /tmp/errorআপনি যে কোনও ত্রুটি পাচ্ছেন সেগুলি ক্যাপচার করার জন্য যোগ করার চেষ্টা করুন বা কিছু। অবশেষে, আমাদের বলুন কোন ব্যবহারকারী এই ক্রন্টব চালাচ্ছেন।
টেরডন

উত্তর:


6

আমি আসলে এর মতো উত্তর দিতে পারি না তবে আমি মনে করি আমি আপনাকে সঠিক দিকে নির্দেশ করতে পারি। আমি আর্চ উইকি এই পাওয়া পৃষ্ঠা এর systemd:

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

[বিভিন্ন systemctl কমান্ডের তালিকা]

systemctl স্থগিত

এটি আমাকে নিম্নলিখিত সম্ভাবনার পরামর্শ দেয়:

  1. আপনি অন্য ব্যবহারকারী লগ ইন করেছেন। সম্ভবত আপনি একটি টিটি মাধ্যমে লগ ইন করেছেন?

  2. cronএর কমান্ড ব্যবহার করে চালায় /bin/shডিফল্টরূপে , আর্চ এ এটির জন্য একটি সিলেট লিঙ্ক /bin/bash। এর অর্থ cronহ'ল একটি অ-ইন্টারেক্টিভ বাশ শেল শুরু করা হচ্ছে যা পরে সনাক্ত করে যে আরও একটি ব্যবহারকারীর সেশন চলছে (আপনার), সুতরাং এটি systemctlআপনার ব্যবহারকারী হিসাবে চালানো সত্ত্বেও চালানোর অধিকার রাখে না ।

সুতরাং, যদি আপনার সমস্যাটি যদি cronচালানোর অনুমতি না দেয় systemctlকারণ আপনি ইতিমধ্যে লগইন করেছেন, আপনি পোলকিটের সাথে খেলে এটি ঘিরে ফেলতে সক্ষম হতে পারেন তবে সেখানে আমার কোনও অভিজ্ঞতা নেই তাই আমি সাহায্য করতে পারি না।


ধন্যবাদ! আমি প্রথম শেল কমান্ড কার্যকর করতে সক্ষম হওয়ায় প্রথম বিকল্পটি মুছে ফেলা যাবে। তবে আমি দ্বিতীয় বিকল্পটি সম্পর্কে আরও কিছু গবেষণা করব।
গ্রেডিয়েন্ট

@ গ্রেডিয়েন্ট আপনি কীভাবে এটি ঠিক করবেন আবিষ্কার করেছেন? আমি একই সমস্যা নিয়ে লড়াই করছি।
আকিরস

আপনি কি আরও বিস্তারিতভাবে দ্বিতীয় সম্ভাবনা ব্যাখ্যা করতে পারেন? এটি সত্যই যে সমস্যাটি রয়েছে তা নিশ্চিত করার কোনও উপায় আছে? আমি মৃত্যুদন্ড কার্যকর করেছি wএবং uptimeক্রোন দ্বারা চালিত স্ক্রিপ্টগুলি থেকে। তাদের আউটপুটগুলি কেবল সেখানে ব্যবহারকারীর উপস্থিতি নির্দেশ করেছিল। তো, এর অর্থ কি আরও কিছু সমস্যা আছে?
আনমল সিং জাগি

3

আপনার নিজের পরিবর্তে রুটের ক্রন্টব ব্যবহার করা সহজ কাজ। এটি দিয়ে সম্পাদনা করুন:

$ sudo crontab -e

পরিবর্তে:

$ crontab -e

এটি আপনার ব্যবহারকারীর চেয়ে কমান্ডগুলি রুট হিসাবে চালায়।
ফ্রেডেরিক বাটেনস

এটি কোনও প্রস্তাবিত অনুশীলন হওয়া উচিত নয় ... ব্যবহারকারীর জন্য কমান্ডটি কাজ করুন।
প্লিটার

1

এখান থেকে উদ্ধৃতি :

অন্য উত্তরটি দুর্দান্ত! তবে এর জন্য রুট ক্রোন দরকার।

আপনি যদি নন-সুডো ক্রোন থেকে হাইবারনেট করতে চান তবে দুটি বিকল্প রয়েছে:

1. পোলকিট ব্যবহার করা

নিম্নলিখিত ফাইলগুলি তৈরি করুন:

[Enable hibernate to be run via cron]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=yes 

com.0.enable-hibernation-from-cron.pklaডিরেক্টরিতে নামকরণ করা হয়েছে /etc/polkit-1/localauthority/50-local.d/

ব্যাখ্যা এখানে দেওয়া আছে

২. ভিসুডো ব্যবহার করা

এখান থেকে উদ্ধৃতি :

যদি ব্যবহারকারীদের কেবল শাটডাউন কমান্ডগুলি ব্যবহার করার অনুমতি দেওয়া হয়, তবে অন্যান্য সুডো সুবিধাগুলি না থাকে, তবে, মূল হিসাবে, কমান্ডটি /etc/sudoersব্যবহারের শেষে নিম্নলিখিতটি যুক্ত করুন visudo

user hostname =NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot

সাবস্টিটিউট userআপনার ব্যবহারকারী নাম এবং hostnameমেশিনের হোস্ট-নেমের জন্য।
এখন আপনার ব্যবহারকারীর সাথে শাটডাউন sudo systemctl poweroffএবং এর মাধ্যমে পুনরায় বুট করতে পারবেন sudo systemctl reboot। কোনও সিস্টেমকে পাওয়ার ডাউন করতে ইচ্ছুক ব্যবহারকারীরাও এটি ব্যবহার করতে পারেন sudo systemctl halt
আপনি যদি আপনার পাসওয়ার্ডের জন্য অনুরোধ না করতে চান কেবল তখনই NOPASSWD: ট্যাগ ব্যবহার করুন।

আমার ক্ষেত্রে, সঠিক লাইনটি হ'ল:

anmol ALL=NOPASSWD: /bin/systemctl hibernate

(মনে রাখবেন যে systemctlআপনার সিস্টেমে লোকেশনটি আলাদা হতে পারে))

এর পরে, আপনি sudo systemctl hibernateহাইবারনেটে ফ্রন ক্রোন লিখতে পারেন ।

দ্রষ্টব্য: সরাসরি সংশোধন /etc/sudoersকরা খারাপ ; পরিবর্তে /etc/sudoers.d/- কমান্ডটি ব্যবহার করে একটি কাস্টম sudoers ফাইল তৈরি করুন sudo visudo -f /etc/sudoers.d/custom


0

আপনি যদি সিস্টেম ক্রন্টাব ব্যবহার করেন তবে আপনি ব্যবহারকারী ক্ষেত্রটি ভুলে যাবেন। চেষ্টা করুন:

* * * * * root /usr/bin/systemctl suspend

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

2
@ গ্রেডিয়েন্টের কোনও ব্যবহারকারীর ক্ষেত্র রয়েছে যদি আপনি ব্যবহার করছেন তবে এটি কি সাধারণ ব্যবহারকারী হিসাবে /etc/crontabআপনি তৈরি করেছেন এমন ক্রন্টব cron -e?
টেরডন

এটি একটি ক্রোন্তাব যা আমি crontab -eএকটি সাধারণ ব্যবহারকারী হিসাবে তৈরি করেছি ।
গ্রেডিয়েন্ট

আপনার সাধারণ ব্যবহারকারীর অ্যাকাউন্টে সম্ভবত systemctl suspendসুডো ছাড়া চালানোর অনুমতি নেই ।
কাস

0

আপনার সিস্টেমে কনফিগারেশন ফাইলটি ব্যবহার করতে হবে /etc/systemd/system

[Unit]
Description=Pimcore Events Processor

[Service]
WorkingDirectory=/var/www/html
ExecStart=/usr/bin/php run something
Restart=always
WatchdogSec=300 #in seconds
User=www-data
Group=www-data

[Install]
WantedBy=multi-user.target
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.