GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menjalankan skrip Perl sebagai daemon sistem di linux?

Jika Anda tidak memiliki Proc::Daemon seperti yang disarankan oleh Chas. Owens, begini cara melakukannya dengan tangan:

sub daemonize {
   use POSIX;
   POSIX::setsid or die "setsid: $!";
   my $pid = fork() // die $!; #//
   exit(0) if $pid;

   chdir "/";
   umask 0;
   for (0 .. (POSIX::sysconf (&POSIX::_SC_OPEN_MAX) || 1024))
      { POSIX::close $_ }
   open (STDIN, "</dev/null");
   open (STDOUT, ">/dev/null");
   open (STDERR, ">&STDOUT");
 }

Saya pikir cara termudah adalah dengan menggunakan daemon. Ini memungkinkan Anda untuk menjalankan proses apa pun sebagai daemon. Ini berarti Anda tidak perlu khawatir tentang pustaka jika Anda, misalnya, memutuskan untuk beralih ke python. Untuk menggunakannya, cukup gunakan:

daemon myscript args

Ini seharusnya tersedia di sebagian besar distro, tetapi mungkin tidak diinstal secara default.


Cara termudah adalah dengan menggunakan Proc::Daemon.

#!/usr/bin/perl

use strict;
use warnings;
use Proc::Daemon;

Proc::Daemon::Init;

my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };

while ($continue) {
     #do stuff
}

Sebagai alternatif, Anda dapat melakukan semua hal yang dilakukan Proc::Daemon:

  1. Percabangan anak dan keluar dari proses induk.
  2. Menjadi pemimpin sesi (yang melepaskan program dari terminal pengendali).
  3. Percabangan proses anak lain dan keluar dari anak pertama. Ini mencegah kemungkinan memperoleh terminal pengendali.
  4. Ubah direktori kerja saat ini ke "/" .
  5. Hapus topeng pembuatan file.
  6. Tutup semua deskriptor file yang terbuka.

Mengintegrasikan dengan sistem runlevel itu mudah. Anda memerlukan skrip seperti berikut (ganti XXXXXXXXXXXX dengan nama skrip Perl, YYYYYYYYYYYYYYYYYYY dengan deskripsi tentang fungsinya, dan /path/to dengan jalur ke skrip Perl) di /etc/init.d . Karena Anda menggunakan CentOS, setelah Anda memiliki skrip di /etc/init.d , Anda cukup menggunakan chkconfig untuk mematikan atau menghidupkannya di berbagai runlevel.

#!/bin/bash
#
# XXXXXXXXXXXX This starts and stops XXXXXXXXXXXX
#
# chkconfig: 2345 12 88
# description: XXXXXXXXXXXX is YYYYYYYYYYYYYYYYYYY
# processname: XXXXXXXXXXXX
# pidfile: /var/run/XXXXXXXXXXXX.pid
### BEGIN INIT INFO
# Provides: $XXXXXXXXXXXX
### END INIT INFO

# Source function library.
. /etc/init.d/functions

binary="/path/to/XXXXXXXXXXXX"

[ -x $binary ] || exit 0

RETVAL=0

start() {
    echo -n "Starting XXXXXXXXXXXX: "
    daemon $binary
    RETVAL=$?
    PID=$!
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/XXXXXXXXXXXX

    echo $PID > /var/run/XXXXXXXXXXXX.pid
}

stop() {
    echo -n "Shutting down XXXXXXXXXXXX: "
    killproc XXXXXXXXXXXX
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ]; then
        rm -f /var/lock/subsys/XXXXXXXXXXXX
        rm -f /var/run/XXXXXXXXXXXX.pid
    fi
}

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

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

exit 0

Linux
  1. Cara Setup Script Startup &Shutdown di Gentoo Linux

  2. Bagaimana menjalankan perintah bash Linux dalam skrip PERL?

  3. Cara membuat skrip Python berjalan seperti layanan atau daemon di Linux

  1. Bagaimana cara menjalankan skrip di latar belakang (linux openwrt)?

  2. Bagaimana saya bisa menanggapi permintaan dalam skrip Linux Bash secara otomatis?

  3. Bagaimana Anda menentukan apakah Anda menggunakan sistem Linux atau BSD di dalam skrip?

  1. Linux – Bagaimana Cara Menjalankan Script Pada Layar Lock/unlock?

  2. Bagaimana Menjalankan Skrip??

  3. Bagaimana saya bisa menjalankan fungsi dari skrip di baris perintah?