একটি সময় কেটে যাওয়ার পরে সুডোর প্রয়োজন এমন একটি কমান্ড চালান


30

আমি সাধারণত করি

sleep 4h; command

4 ঘন্টা পরে একটি কমান্ড চালানো। তবে, যদি এই কমান্ডটির প্রয়োজন হয় sudo, এটি কাজ করবে না।

sudoআমি sleepকমান্ডটি চালাচ্ছি সেই মুহুর্তে কি অনুমতি দেওয়া সম্ভব ?



সেই বিশেষ ক্ষেত্রে আমি মনে করি আপনি কেবল এটি ব্যবহার করতে পারেন shutdown। একটি নির্দিষ্ট সময়ে ঘুমের সময় নির্ধারণের জন্য sudo এবং উপযুক্ত যুক্তি সহ কমান্ড দিন।
ওড়ফিশ


আপনার কী কাজটি করতে হবে এবং সঠিক 4 ঘন্টা ঘুম কেন?
থরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


46

sudoআপনি কমান্ডগুলি চালিত করেন সেখানে একটি রুট শেল শুরু করতে ব্যবহার করুন :

sudo bash -c 'sleep 4h; command'

রুট শেলটিতে চলমান প্রতিটি কমান্ড রুট অনুমতি নিয়ে চলে, যা sleepক্ষতি করে না। আপনার যদি এটিতে ব্যবহারকারীর অনুমতি সহ একটি কমান্ড চালানোর প্রয়োজন হয় sudo -u USERNAME COMMAND, যেমন:

$ sudo bash -c 'sleep 4h; sudo -u dessert whoami; whoami'
dessert  # whoami run as user dessert
root     # whoami run as root

আর একটি পদ্ধতি sudo visudoহ'ল রুট অ্যাক্সেস ছাড়াই কমান্ডের প্রয়োগের অনুমতি দেওয়ার জন্য ব্যবহার করা হবে , দেখুন: sudo ব্যবহার করে পাসওয়ার্ড না প্রম্পট না করে কিভাবে মৃত্যুদণ্ড কার্যকর করা যায়?
নোট করুন যে কমান্ডের উপর নির্ভর করে এটি একটি সুরক্ষা ত্রুটি তৈরি করতে পারে।


21

ধরে নিচ্ছি আপনি কেবল একবারে প্রক্রিয়াটি চালাতে চান (উদাহরণস্বরূপ প্রতি 4 ঘন্টা নয়) তবে আপনি ব্যবহার করতে পারবেন atd

  1. এটিড চলছে কিনা তা নিশ্চিত করুন (উবুন্টুতে এটি /etc/init.d/atd statusএখনও বা আরও ভাল systemctl status atd)
  2. রুট হিসাবে একটি টার্মিনাল এ আপনার কমান্ড নিম্নলিখিত হিসাবে চালান:

    # at now + 4 hours
    warning: commands will be executed using /bin/sh
    at> command
    at> CTRL-D
  3. আপনি যদি প্রতি 4 ঘন্টা এটি চালাতে চান তবে আপনি আপনার ক্রন্টবায় নিম্নলিখিত কনফিগারেশন সহ ক্রোন (মূল হিসাবে) ব্যবহার করতে পারেন

    0 */4 * * * sh -c $'/path/to/command'

2
হ্যাঁ, atএই কাজের জন্য সঠিক সরঞ্জাম, কারণ এটি I / O পুনঃনির্দেশের যত্নও নেয়, শেল উইন্ডোটি ব্লক করে না এবং ব্যবহারকারী লগ আউট হয়ে যাওয়ার পরে বা মেশিনটি পুনরায় চালু করার পরেও কাজ করে।
সাইমন রিখটার

4
@ সিমনরিখটার: sudo bash -c 'sleep 4h && command' &ব্যাকগ্রাউন্ডে সুডো রাখা শেল উইন্ডো / ট্যাবটি ব্লক না করার সহজ উপায়। যদি আপনি চান যে আউটপুটটি সংযোজনীয়ভাবে একটি অনুস্মারক হিসাবে পপ আপ হবে যা এটি ঘটেছিল, এটি সহজ। এটি রিবুটগুলি জুড়ে কাজ করে না, তবে আপনার nohupসেটিংসের উপর নির্ভর করে এটি শেল থেকে বেরিয়ে / লগ আউট হওয়ার পরে চলতে পারে।
পিটার কর্ডেস

4
নোট করুন যে atনির্দিষ্ট সময়টিতে সিস্টেমটি সাসপেন্ড করা হওয়ার সাথে সাথে কমান্ডটি চালানোর সাথে সাথে এটি চালিয়ে যায় , এখানে U&L- এ দেখুন - কমান্ড (গুলি) চালানোর জন্য আপনি এটি চান নাও হতে পারে।
মিষ্টি

2
কেবলমাত্র একটি পরামর্শ, আপনি সরাসরি সেই init.d স্ক্রিপ্ট কল করার পরিবর্তে পরিষেবার স্থিতি পরীক্ষা করতে systemctl ব্যবহার করতে পারেন। : যদিও উভয় আপাতদৃষ্টিতে একই ফলাফল আছে, আমি মনে করি systemd হল পরিষেবার সাথে আলাপচারিতার আধুনিক উপায় পছন্দের করা উচিতsystemctl status atd
বাইট কমান্ডার

15

একটি উপায় হ'ল sudoঅনুমতিগুলি সহ শেলসক্রিপ্টের মাধ্যমে চালানো (এবং আপনি শেলস্ক্রিপ্ট শুরু করার সাথে সাথে পাসওয়ার্ড দিন), যদি শেলস্রিপ্ট বর্তমান ডিরেক্টরিতে থাকে,

sudo ./delayer 4h

যেখানে delayerসামগ্রী সহ শেলসক্রিপ থাকতে পারে

#!/bin/bash
sleep "$1"
command

এটি দিয়ে সম্পাদনযোগ্য করুন

chmod +x delayer

এবং অনুলিপি বা PATHইচ্ছুক হলে ডিরেক্টরিতে এটি সরান ।


আপনি যদি আরও নমনীয় শেলসক্রিপ্ট চান, যেখানে প্যারামিটারগুলি প্রবেশ করে বিলম্ব করতে কমান্ড [লাইন] নির্বাচন করতে পারেন, আপনি চেষ্টা করতে পারেন

#!/bin/bash

if [ $# -lt 2 ] || [ "$(whoami)" != "root" ]
then
 echo "Delay start of command, that needs 'sudo'
Usage:    sudo $0 <delay> <command line>
Example:  sudo $0 4h parted -ls"
 exit
fi

sleep "$1"
shift
"$@"

ডেমো উদাহরণ (সংক্ষিপ্ত বিলম্ব, 5s, ডেমো উদ্দেশ্যে),

$ ./delayer
Delay start of command, that needs 'sudo'
Usage:    sudo ./delayer <delay> <command line>
Example:  sudo ./delayer 4h parted -ls

$ sudo ./delayer 5s parted /dev/sdc p
[sudo] password for sudodus: 
Model: Kanguru SS3 (scsi)
Disk /dev/sdc: 15,9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 2      1049kB  2097kB  1049kB               primary  bios_grub
 3      2097kB  258MB   256MB   fat32        primary  boot, esp
 4      258MB   2274MB  2016MB               primary
 5      2274MB  12,5GB  10,2GB  ext2         primary
 1      12,5GB  15,9GB  3394MB  ntfs         primary  msftdata

3
ঠিক আছে, যদি এটি /bin/shসিনট্যাক্স হয় তবে তা ঠিক থাকবে। তবে আপনি যদি ব্যাশ-নির্দিষ্ট বৈশিষ্ট্যগুলি ব্যবহার করতে চান তবে শেবাং প্রয়োজনীয়। সে সম্পর্কে কোথাও আমার এবং স্টিলিড্রাইভারের মধ্যে আলোচনা হয়েছিল। আমি সঠিকভাবে প্রতিক্রিয়া জানাতে পারার আগে অ্যান্ড ভিডিওনাথ তার মন্তব্য মুছে ফেলে। ওহ ভাল
সের্গেই কলডিয়াজনি

@ সার্জিইক্লোডিয়াজনি, আপনি ঠিক বলেছেন সুতরাং এক্ষেত্রে শেবাংটি এমন বৈশিষ্ট্যগুলির ক্ষেত্রে শেলস্ক্রিপ্টকে শক্তিশালী করতে পারে যেখানে বাক্য গঠন পৃথক হতে পারে।
সুডোডাস

@ সের্গি কলোডিএজনি ঠিক আছে এটি কেবল একটি পরামর্শ ছিল তাই আমি ভেবেছিলাম মন্তব্যটি সেখানে রাখার প্রয়োজন নেই এবং এটি কেবল বিশৃঙ্খলা যুক্ত করবে। চ্যাটে আমাকে হিট করে নির্দ্বিধায় আপনার দৃষ্টিভঙ্গি
দেখিয়ে দিন

2

আরেকটি উপায় হ'ল sudo -s(ডিরেক্টরি পরিবর্তন করে না) বা sudo -i(বর্তমান ডিরেক্টরিটিকে মূল ডিরেক্টরিতে পরিবর্তন করে ) দিয়ে সুডো ইন্টারেক্টিভ সেশন শুরু করা এবং তারপরে আপনার কমান্ডগুলি প্রবেশ করুন (সুডো ছাড়াই)

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