/Etc/init.d স্ক্রিপ্টে ডেমনকে কল করা ব্লক করা হচ্ছে, পটভূমিতে চলছে না


9

আমার একটি পার্ল স্ক্রিপ্ট রয়েছে যা আমি ডিমনাইজ করতে চাই। মূলত এই পার্ল স্ক্রিপ্ট প্রতি 30 সেকেন্ডে একটি ডিরেক্টরি পড়বে, এটি যে ফাইলগুলি খুঁজে পাবে সেগুলি পড়বে এবং তারপরে ডেটা প্রক্রিয়া করবে। এটি সহজ রাখতে এখানে নীচের পার্ল স্ক্রিপ্টটি বিবেচনা করুন (যাকে বলা হয় সিনপাইপ_সার্ভার, এই স্ক্রিপ্টটির একটি প্রতীকী লিঙ্ক এতে রয়েছে /usr/sbin/):

#!/usr/bin/perl
use strict;
use warnings;

my $continue = 1;
$SIG{'TERM'}  = sub { $continue = 0; print "Caught TERM signal\n"; };
$SIG{'INT'} = sub { $continue = 0; print "Caught INT signal\n"; };

my $i = 0;
while ($continue) {
     #do stuff
     print "Hello, I am running " . ++$i . "\n";
     sleep 3;
}

সুতরাং এই স্ক্রিপ্টটি মূলত প্রতি 3 সেকেন্ডে কিছু ছাপায়।

তারপরে, আমি যেমন এই স্ক্রিপ্টটি ডিমনাইজ করতে চাইছি, আমি এই ব্যাশ স্ক্রিপ্টটিকে (সিনপাইপ_সভারও বলা হয়) এও রেখেছি /etc/init.d/:

#!/bin/bash
# synpipe_server : This starts and stops synpipe_server
#
# chkconfig: 12345 12 88
# description: Monitors all production pipelines
# processname: synpipe_server
# pidfile: /var/run/synpipe_server.pid
# Source function library.
. /etc/rc.d/init.d/functions

pname="synpipe_server"
exe="/usr/sbin/synpipe_server"
pidfile="/var/run/${pname}.pid"
lockfile="/var/lock/subsys/${pname}"

[ -x $exe ] || exit 0

RETVAL=0

start() {
    echo -n "Starting $pname : "
    daemon ${exe}
    RETVAL=$?
    PID=$!
    echo
    [ $RETVAL -eq 0 ] && touch ${lockfile}
    echo $PID > ${pidfile}
}

stop() {
    echo -n "Shutting down $pname : "
    killproc ${exe}
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ]; then
        rm -f ${lockfile}
        rm -f ${pidfile}
    fi
}

restart() {
    echo -n "Restarting $pname : "
    stop
    sleep 2
    start
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    status)
        status ${pname}
    ;;
    restart)
        restart
    ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
    ;; esac

exit 0

সুতরাং, (যদি আমি ডেমনের জন্য ডকটি ভালভাবে বুঝতে পারি) পার্ল স্ক্রিপ্টটি পটভূমিতে চলতে হবে এবং /dev/nullযদি আমি সম্পাদন করি তবে আউটপুটটি পুনঃনির্দেশ করা উচিত :

service synpipe_server start

তবে পরিবর্তে আমি যা পাই তা এখানে:

[root@master init.d]# service synpipe_server start
Starting synpipe_server : Hello, I am running 1
Hello, I am running 2
Hello, I am running 3
Hello, I am running 4
Caught INT signal
                                                           [  OK  ]
[root@master init.d]# 

সুতরাং এটি পার্ল স্ক্রিপ্টটি শুরু করে তবে এটি বর্তমান টার্মিনাল অধিবেশন থেকে আলাদা না করে চালায় এবং আমি আমার কনসোলটিতে আউটপুট প্রিন্ট দেখতে পাচ্ছি ... যা আমি প্রত্যাশা করছিলাম তা আসলে এটি নয়। তদুপরি, পিআইডি ফাইলটি খালি (বা কেবল একটি লাইন ফিড সহ, ডেমন দ্বারা কোনও পিড ফেরত দেওয়া হয় না )।

আমি কী ভুল করছি সে সম্পর্কে কারও কি ধারণা আছে?

সম্পাদনা: সম্ভবত আমার বলা উচিত যে আমি রেড হ্যাট মেশিনে আছি।

Scientific Linux SL release 5.4 (Boron)

ডেমন ফাংশনটি ব্যবহার না করে যদি আমি কাজটি করি তবে আমি এই জাতীয় কিছু ব্যবহার করব:

nohup ${exe} >/dev/null 2>&1 &

আরআইডি স্ক্রিপ্টে?

উত্তর:


4

আমি আপনাকে redhat init স্ক্রিপ্ট daemonফাংশনের অতিরিক্ত স্তর যুক্ত করার পরিবর্তে পার্ল স্ক্রিপ্টটি সরাসরি ডিমনাইজ করার পরামর্শ দিচ্ছি । আপনি যদি নিজে নিজেই এটি লেখার চেষ্টা করেন তবে ডেমোনগুলি ঠিক পাওয়া শক্ত। প্রোক :: ডেমন বেশ সোজা।

এছাড়াও, পার্ল ডেমনগুলি কীভাবে লিখতে হয় সে সম্পর্কে এখানে আলোচনা করা হয়েছে

বোনাসের উত্তর: ডিমনটোলস এবং প্রোক :: ডেমোনটোলগুলি ব্যবহার করুন । এটি একটি বিস্তৃত ডেমন ম্যানেজমেন্ট সিস্টেম সরবরাহ করে এবং আপনার সম্ভবত ইতিমধ্যে যেকোন উপায়ে ডেমনটোলগুলি ইনস্টল রয়েছে। কিছু লোক ডেমনটুলগুলি অপছন্দ করে তবে এটি কাজটি করে।

আমি কতবার ডিমন লিখি তা এখনও অদ্ভুত বলে মনে হয়। হয়তো আমার শুধু ডমন ব্যবহার করা উচিত।


2

আপনি যদি ডেবিয়ান এবং এর ডেরিভেটিভ ব্যবহার start-stop-daemonকরছেন তবে সমস্যা ছাড়াই আপনার প্রক্রিয়া শুরু করতে -b বিকল্পটি ব্যবহার করুন ।


এটি রেডহ্যাট মেশিন, সুতরাং ব্যবহার করা উচিত daemonএবং killprocপরিবর্তে
মারিউসজএস

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