দেবিয়ান - ব্যবহারের জন্য কোনও ইন্টারনেট সংযোগ প্রস্তুত হওয়ার সাথে সাথেই শুরুতে স্ক্রিপ্টটি কীভাবে চালানো যায়?


14

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

আপনি কি দয়া করে এটির জন্য একটি ডামি স্ক্রিপ্ট পোস্ট করতে পারেন এবং এটি আমাকে কোথায় রাখতে এবং প্রদত্ত শর্তে এটি কার্যকর করাতে পারেন?

স্ক্রিপ্টটি কেবল পর্দা শুরু করতে হবে এবং তারপরে শেষ করতে হবে তবে স্ক্রিনটি চালিয়ে যাওয়া উচিত।


সম্পাদনা আমি ইতিমধ্যে /etc/network/if-up.d/ফোল্ডারটি শুনেছি । তবে কীভাবে আমি নিশ্চিত করতে পারি যে যদি ইন্টারনেট সংযোগটি হারিয়ে যায় এবং আবার প্রতিষ্ঠিত হয় তবে স্ক্রিপ্টটি আবার কার্যকর করা হবে না?


@ কেলাডা দয়া করে সম্পাদনাটি দেখুন
MinecraftSamrock

উত্তর:


21

আপনার স্ক্রিপ্টটি এতে রাখুন /etc/network/if-up.dএবং তা কার্যকর করুন। যখনই কোনও নেটওয়ার্ক ইন্টারফেস আসে তখন এটি স্বয়ংক্রিয়ভাবে চালিত হবে।

এটি প্রথমবার প্রতিটি বুটে চালিত হওয়ার জন্য কাজ করতে, এটি প্রথমবারের পরে তৈরি করা একটি পতাকা ফাইলের অস্তিত্বের জন্য পরীক্ষা করে দেখুন। উদাহরণ:

#!/bin/sh

FLAGFILE=/var/run/work-was-already-done

case "$IFACE" in
    lo)
        # The loopback interface does not count.
        # only run when some other interface comes up
        exit 0
        ;;
    *)
        ;;
esac

if [ -e $FLAGFILE ]; then
    exit 0
else
    touch $FLAGFILE
fi

: here, do the real work.

সার্ভারটি বন্ধ হয়ে গেলে ফ্ল্যাগফাইলে মোছা হবে?
MinecraftSamrock

1
হ্যাঁ, কারণ ডেবিয়ানে /var/runএকটি অস্থির ফাইল সিস্টেম (ক tmpfs)। সুতরাং এটি প্রতিটি নতুন বুটে খালি আসার গ্যারান্টিযুক্ত।
Celada

1
ভালো বল ধরা. আমি মনে করি আপনাকে সত্যিই দুর্ভাগ্য হতে হবে তবে আমি মনে করি হ্যাঁ, হট প্লাগড ইন্টারফেসগুলির কারণে যা একই সাথে উত্থাপিত হতে পারে। সুতরাং আমি অনুমান করি আপনি পরীক্ষার-পরে তৈরির পরিবর্তে এটি পরমাণুর সাথে করতে পারেন যা এটি নিরাপদ করে তুলবে, তবে আমি আমার মাথার উপরের অংশটি দিয়ে যা এলাম তা সুন্দর নয়! python -c 'import os; os.open("/var/run/work-was-already-done", os.O_EXCL|os.O_CREAT, 0)' 2>/dev/null || exit 0
সেলেদা

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

1
@ মাইনক্রাফ্টশাম্রোকের $IFACEযে কোনও ইন্টারফেস উঠে আসার মান হিসাবে থাকতে পারে। আপনি যে সমস্ত ইন্টারফেসের সাথে বিদ্যমান তার সবগুলি তালিকাভুক্ত করতে পারেন ip linkবা স্ক্যান করে কোনটি কনফিগার করা হয়েছে তা দেখতে পারেন/etc/network/interfaces
সেলেডা

9

এটি খুব ভাল কাজের জন্য একটি কাজ systemd

সিস্টেমযুক্ত পরিষেবা হিসাবে স্ক্রিপ্ট চালানো

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

আপনার নিজের পরিষেবার জন্য প্রস্তাবিত ফোল্ডারটি হ'ল /etc/systemd/system/(অন্য বিকল্পটি হ'ল /lib/systemd/systemতবে এটি সাধারণত ওওটিবি পরিষেবার জন্য ব্যবহার করা উচিত)।

যেমন ফাইলটি তৈরি করুন sudo vim /etc/systemd/system/autossh.service:

[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target

[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody

# Useful during debugging; remove it once the service is working
StandardOutput=console

[Install]
WantedBy=multi-user.target

এখন আপনি পরিষেবাটি পরীক্ষা করতে পারেন:

sudo systemctl start autossh

পরিষেবার স্থিতি পরীক্ষা করা:

systemctl status autossh

পরিষেবা বন্ধ করা:

sudo systemctl stop autossh

একবার আপনি যাচাই করেছেন যে পরিষেবা প্রত্যাশা অনুযায়ী কাজ করে এটি এটিকে সক্ষম করে:

sudo systemctl enable autossh

দ্রষ্টব্য: সুরক্ষার প্রয়োজনে systemdস্ক্রিপ্টগুলি কীভাবে crontabসঞ্চালিত হয় তার অনুরূপ একটি সীমাবদ্ধ পরিবেশে স্ক্রিপ্টটি চালানো হবে, সুতরাং pre PATH এর মতো প্রাক-বিদ্যমান সিস্টেম ভেরিয়েবল সম্পর্কে কোনও অনুমান করবেন না। Environmentআপনার স্ক্রিপ্টের সংজ্ঞা দিতে নির্দিষ্ট ভেরিয়েবলের প্রয়োজন হলে কীগুলি ব্যবহার করুন । set -xআপনার বাশ স্ক্রিপ্টের শীর্ষে যুক্ত করা এবং তারপরে দৌড়ানো systemctl status my_serviceআপনার স্ক্রিপ্টটি কেন ব্যর্থ হচ্ছে তা শনাক্ত করতে সহায়তা করতে পারে। টাম্বের নিয়ম হিসাবে সর্বদা সর্বদা নিখুঁত পথ ব্যবহার করুন echoবা স্পষ্ট করে সংযুক্ত করে আপনার AT PATH সংজ্ঞায়িত করুন Environment=MYVAR=abc


2

ইন্টারনেট সংযোগ /etc/rc6.d/সম্ভবত একটি এন্ট্রি দ্বারা আনা হয়েছে S35networking। আপনি যদি সেই ফাইলটি পরিবর্তন করেন এবং শেষে আপনার কমান্ডগুলি সন্নিবেশ করান, বা এর সাথে আরও ভালভাবে একটি /etc/init.d/mystuffলিঙ্ক যুক্ত করুন এবং /etc/rc0.d/S36mystuffসেখানে আপনার আদেশগুলি সন্নিবেশ করান, তবে নেটওয়ার্কটি শেষ হওয়ার সাথে সাথে এটি শুরু হবে।


সংযোগটি হারিয়ে গেলে এবং পুনরায় প্রতিষ্ঠিত হয়ে গেলে কি তাকে ডাকা হবে? কারণ অন্যথায় আমি শুধু স্ক্রিপ্ট পুরা পারে/etc/network/if-up.d
MinecraftShamrock

না এটি কেবল প্রারম্ভিক সময়ে
অ্যান্থন

1
এটি কাজ করবে, তবে কেবল নির্ভুলতার জন্য আমাকে উল্লেখ করতে দিন যে কোনও লিপি /etc/rc0.dপ্রারম্ভকালে চালানো হবে না, সেগুলি শাটডাউন চলবে (রান স্তর 0)। প্রারম্ভকালে এটি কিছু /etc/rc2.dবা অনুরূপ হবে। বিশেষত ওপি'র দেবিয়ান হুইজির জন্য এটি /etc/rcS.d/S12networking। এটি অবশ্যই একই ফাইলের সাথে একই রকম হয়। এছাড়াও বিটিডাব্লু @ অ্যান্টন আমার উত্তর ঠিক করার জন্য ধন্যবাদ: "প্লট" এর পরিবর্তে "দয়া করে"? কি অদ্ভুত টাইপ!
সেলেদা

@ কেলাডা আপনার অধিকার এটি আমার (দেবিবিহীন সিস্টেমে) আরসি 6। আপনি সেখানে 'দয়া করে' রাখতে চান কিনা তা আমি নিশ্চিত নই, তবে কেবল "পুট" আরও কৃপণ বলে মনে হয়েছিল। বিটিডাব্লু আমি আপনার উত্তরটিকে উঁচু করে তুলেছি, এটি নেটওয়ার্কিংয়ের জন্য কেবল একটি উন্নত পন্থা কারণ এটির if-up.dযেমন জেনেরিক প্রক্রিয়া যা পুনরায় সংযোগে কাজ করে।
অ্যান্থন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.