কীভাবে একটি বিলম্ব সহ পটভূমিতে একটি কমান্ড চালাবেন?


33

কেউ আমাকে কীভাবে এই ক্রিয়াকলাপটি করতে একটি প্রোগ্রাম করবেন তা আমাকে দেখিয়ে দিতে পারে: 5 মিনিটের পরে

echo "80" > /sys/class/leds/blue/brightness

আমি এই প্রোগ্রামটি ব্যাকগ্রাউন্ডে চালিত rngdকরতে চাই ( পরিষেবার মতো ) আমি এটি করতে পারি না কারণ লিনাক্স সম্পর্কে আমি খুব বেশি জানি না।

উত্তর:


51
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &

এইভাবে আপনার স্ক্রিপ্টটি চলতে থাকে, বা আপনি তত্ক্ষণাত্ নিয়ন্ত্রণ পুনরুদ্ধার করেন, যখন স্ক্রিপ্টটির একটি নতুন পটভূমি টাস্ক দুটি কমান্ড সহ শুরু হয়: ঘুম এবং প্রতিধ্বনি।

সাধারণ ত্রুটি পারেন দিতে চেষ্টা করছে sleepবা echoবা উভয় &যা না করবে না কাজ দেয়ার উদ্দেশ্যে করা হয়। কমান্ডের একটি সিরিজ চালু করা ()যদিও এগুলি একটি পৃথক শেল প্রক্রিয়া তৈরি করে, যা আপনি এরপরে পুরোটিকে প্রেক্ষাপটে প্রেরণ করতে পারেন &


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

 [ -f /tmp/startdelay ] && sleep 30
 touch /tmp/startdelay
 ( sleep 30 ; rm /tmp/startdelay ) &
 [ -f /tmp/noautostart ] && exit 0
 start_app

যদি আমি লগ ইন করি এবং সম্পাদনা করি touch /tmp/noautostartতবে মূল অ্যাপ্লিকেশনটি আরম্ভ হবে না। যদি ওয়াচডাগ কিক করে থাকে rm /tmp/startdelayতবে সম্পাদনা করা হবে না এবং পরবর্তী সময় সিস্টেমটি শুরু হলে এটি বন্ধ করার জন্য এটি আমাকে 30s অতিরিক্ত দেবে। অন্যথায় পুনরায় আরম্ভ করা দেরি না করে দ্রুত হবে।


হ্যাঁ আমি সম্মত, তবে এটি ব্যবহারকারীর প্রতিবিম্বের অংশও হতে পারে ;-)
কিউই

অন্যান্য উত্তরগুলি "ব্যাকগ্রাউন্ডে" অংশটি মিস করেছে বলে মনে হচ্ছে। না, আমি সে সম্পর্কে বেশ স্পষ্ট ছিলাম: /
সোনারলকস

@ গোল্ডিলোকস: আমি আমার উত্তর পোস্ট করার পরে আপনি ব্যাকগ্রাউন্ড অংশে প্রেরণটি যুক্ত করেছেন।
এসএফ

না, আমার মূল উত্তরটি হ'ল ঘুমের &ব্যাকগ্রাউন্ডের সাথে ঘুম যুক্ত একটি ফাংশন চালানো ছিল ; "আপনারও ঘুমের ব্যাকগ্রাউন্ড করতে হবে" শুরু থেকেই প্রথম লাইনে ছিল। আপনি যদি আমাকে বিশ্বাস না করেন তবে সম্পাদনার ইতিহাস দেখুন। এবং আমার উত্তরটি আপনার থেকে 5 মিনিটের বেশি পুরানো: পি
গোল্ডিলকস

1
@ জ্যাঙ্কান্ট: ... আহ, প্রশ্নটি "কীভাবে একটি বিলম্বের সাথে পটভূমিতে একটি কমান্ড চালাবেন ?" - আপনি অন্যথায় এটি কীভাবে অর্জন করবেন? (এবং না, আপনি ()গোষ্ঠীটি ব্যাকগ্রাউন্ড না করলে, মস্তকটি শেষ না হওয়া পর্যন্ত আসল শেলটি থামবে))
এসএফ।

11

atকমান্ড ব্যবহার করুন

echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min

যে পটভূমি চলবে


2
এটি করার সঠিক উপায় এটি তবে এটিড অ্যাডমন চলমান দরকার এবং বেশিরভাগ সিস্টেমে একটি প্যাকেজ ইনস্টল করা দরকার।
জুলিয়ান

আপনি পালানো এড়ানোর জন্য একক উদ্ধৃতি ব্যবহার করতে পারেন এবং echoপুরোপুরি হেরিডোক বা এখানে ব্যবহারের মাধ্যমে পূর্ববর্তীতা করতে পারেন।
ক্রিস ডাউন

@ জুলিয়ান, atএকটি স্ট্যান্ডার্ড পসিক্স কমান্ড। কোন ইউনিক্সের মতো সিস্টেমে এটি ডিফল্টরূপে উপলব্ধ নেই?
স্টাফেন চেজেলাস

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

আমি 'এট' চেষ্টা করেছি এবং অ্যান্ড্রয়েড 8
beppe9000

6

আপনি যদি 5 মিনিটের মধ্যে কিছু চালাতে চান তবে আপনার প্রোগ্রামটির বাকি অংশটি চালিয়ে যেতে (বা সমাপ্ত) করতে চান তবে আপনার ঘুমের ব্যাকগ্রাউন্ডও দরকার:

#!/bin/bash

runWithDelay () {
    sleep $1;
    shift;
    "${@}";
}

runWithDelay 3 echo world &
echo hello    

এটি মুদ্রণ করবে helloএবং তারপরে 3 সেকেন্ড পরে (মূল প্রোগ্রামটি বেরিয়ে আসার পরে), মুদ্রণ করবে world

গুরুত্বপূর্ণ অংশটি হ'ল &ব্যাকগ্রাউন্ডে ফাংশন এক্সিকিউশনটি কাঁটাচামচ করা।


1
আমি কি runWithDelay () { sleep $1; "${@:2}"; }পরিবর্তে পরামর্শ দিতে পারি?
manatwork

1
আমি মনে করি এটি doWhateverWithDelay 3 &আপনার দ্বিতীয় উদাহরণে পড়া উচিত ।
বারান

@ মান্যাটওয়ার্ক: চিয়ার্স
স্বর্ণিলকস

1
@ গোল্ডিলোকস, এটি ব্যবহারে অপরিহার্য $@হ'ল আপনি এটিকে উদ্ধৃত করতে পারেন এবং উদ্ধৃত শব্দের তালিকা হিসাবে প্রসারিত হবে। সুতরাং এটি আরও ভাল করে তৈরি করুন "$@"(বা "${@}"যদি আপনি ধনুবন্ধগুলি পছন্দ করেন)। পেস্টবিন.
com

@ মান্যাটওয়ার্ক: পয়েন্ট তোলা;) আমি চেষ্টা করেছি যে প্রতিধ্বনি ( -n) দিয়ে আর্গোগুলি ব্যবহার করেছি , তবে স্পষ্টতই এটি কিছুটা নিষ্পাপ ছিল।
স্বর্ণলোকস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.