If-up.d এ স্ক্রিপ্টটি 3 বার চলমান বলে মনে হচ্ছে। কেবল এটি একবার চালানো চাই


1

/etc/network/if-up.dপ্রারম্ভকালে আমার ভিপিএন এর সাথে সংযোগ করার জন্য আমার একটি স্ক্রিপ্ট রয়েছে । দেখা যাচ্ছে যে স্ক্রিপ্টটি তিনবার চলছে এবং তাই আমার ভিপিএন সাথে তিনবার সংযুক্ত হচ্ছে। স্টার্টআপের পরে, sudo ifconfigযাচাই করা যাচাই করে যে আসলে তিনটি টানেল তৈরি করা হয়েছিল। এছাড়াও, যখন থেকে আউটপুটটি দেখছি তখন আমি তিনটিই ওপেনভিপিএন ডিমন দেখতে পাচ্ছি ps aux। এটি কীভাবে নিশ্চিত হবে যে এটি কেবল একবারে চলে? এবং কেন এটি একাধিকবার চলছে? আমি ডেবিয়ান 7.3 চালাচ্ছি।

বিষয়বস্তু হ'ল /etc/network/if-up.d/connectvpn:

#!/bin/sh
/usr/sbin/openvpn --daemon --keepalive 5 30 --config /etc/openvpn/configs/bitterroot.conf

আপনার সাহায্যের জন্য ধন্যবাদ! জেফ


কেন আপনি পাস করা যুক্তিগুলি পরীক্ষা করছেন না?
Ignacio Vazquez-Abram

@ IgnacioVazquez-Abram আমি দুঃখিত, আমি পাস হওয়া যুক্তি যাচাই করে আপনি কী বোঝাতে চাই তা নিশ্চিত নই। আপনি আরও ব্যাখ্যা করতে পারেন? ধন্যবাদ.
জেফ এরিকসন

$1, $2ইত্যাদি ইত্যাদি
ইগনাসিও ভাস্কেজ-আব্রাম

@ IgnacioVazquez-Abram আসল স্ক্রিপ্টে কোনও পাস করা যুক্তি নেই /etc/network/if-up.d/connectvpn। এটি কেবল W / O আর্গুমেন্ট হিসাবে চালিত হয়।
জেফ এরিকসন

উত্তর:


4

সাধারণভাবে, ifup/ ifdownআপনার গালিটি কেবল একবার চালিত হয় তা গ্যারান্টি দেয় না। এইভাবে আপনার লিপিটি আদর্শবান হতে হবে; এটি ইতিমধ্যে বিদ্যমান একটি টানেল স্থাপন না করার নিজস্ব যুক্তিযুক্ত। অবশ্যই সর্বোত্তম উপায় হ'ল টানেলটি ইতিমধ্যে আছে কিনা তা পরীক্ষা করে স্ক্রিপ্টটি শুরু করা:

# Exit if network device "tun0" exists.
ip link show dev tun0 >/dev/null 2>&1 && exit 0

অতিরিক্তভাবে, স্ক্রিপ্টগুলি if-up.dইত্যাদি প্রতিটি ইন্টারফেসের জন্য চালিত হয় যা উত্থাপিত হয়। জেফটি সঠিকভাবে পর্যবেক্ষণ করে, if-*.dস্ক্রিপ্টগুলি কোনও আর্গুমেন্ট গ্রহণ করে না যা উল্লেখ করে যে কোন ইন্টারফেসটি আসছে।

পরিবর্তে, ইন্টারফেস প্রতি (5) ম্যান পৃষ্ঠা:

   There  exists  for  each  of  the  above  mentioned options a directory
   /etc/network/if-<option>.d/ [...]

   All of these commands have access to the  following  environment  vari‐
   ables.

   IFACE  physical name of the interface being processed

   LOGICAL
          logical name of the interface being processed

  [... and more ...]

সমাধানটি হ'ল স্ক্রিপ্টটি সঠিক IFACEমানের জন্য পরীক্ষা করে শুরু করা , যেমন:

# Exit if we're not starting "eth0".
[ "$IFACE" = 'eth0' ] || exit 0

অন্যথায়, স্ক্রিপ্টটি প্রতিটি নেটওয়ার্ক ডিভাইসের জন্য চলবে, যার মধ্যে রয়েছে lo, এই সময়ে কোনও টানেল স্থাপনে এটি খুব তাড়াতাড়ি হতে পারে।


2

যোগ

if [ "$MODE" != start ]; then
        exit 0
fi

আপনার লিপি।

সাধারণভাবে, এই জাতীয় জিনিসগুলি ডিবাগ করার জন্য প্রথমে আপনার স্ক্রিপ্টটি কেবল এমন কিছু তৈরি করে তৈরি করা প্রথাগত

#!bin/sh
echo "$@" >/tmp/blah
set >>/tmp/blah

/tmp/blahস্ক্রিপ্টটি সঞ্চালনের পরে কী কী আর্গুমেন্ট (যদি থাকে) এবং কী চলবে তখন তার পরিবেশে এটি কী দেখায় সে সম্পর্কে মোটামুটি ধারণা পেতে স্ক্রিপ্টটি চালানোর পরে এর বিষয়বস্তুগুলি পরীক্ষা করুন ।


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