#!/usr/bin/env perl package ubic_daemon; { $ubic_daemon::VERSION = '1.49'; } # ABSTRACT: daemonize any binary use strict; use warnings; use Getopt::Long 2.33; use Pod::Usage; use Ubic::Daemon qw(:all); use Ubic::Settings; return 1 if caller(); my $name; my $pid_dir = Ubic::Settings->data_dir.'/ubic-daemon'; my ($stop, $list); GetOptions( 'name=s' => \$name, 'pid-dir=s' => \$pid_dir, 'stop' => \$stop, 'list' => \$list, ) or pod2usage(2); if ($stop) { pod2usage(2) unless @ARGV == 0; unless (-e "$pid_dir/$name") { die "$name not found"; } # TODO - check owner stop_daemon("$pid_dir/$name"); system("rm -rf $pid_dir/$name"); } elsif ($list) { pod2usage(2) unless @ARGV == 0; for my $file (glob "$pid_dir/*") { my $name = File::Spec->abs2rel($file, $pid_dir); print "$name\t"; if (check_daemon($file)) { print "running\n"; } else { print "dead\n"; } } } else { pod2usage(2) unless @ARGV == 1; pod2usage(2) unless defined $name; start_daemon({ name => $name, pidfile => "$pid_dir/$name", bin => shift(@ARGV), }); } __END__ =pod =head1 NAME ubic_daemon - daemonize any binary =head1 VERSION version 1.49 =head1 SYNOPSIS ubic-daemon --name=sleep 'sleep 1000' ubic-daemon --stop --name=sleep ubic-daemon --list =head1 DECSRIPTION This program can be used to start any binary in the background. Note that it doesn't create the proper service: binary won't be monitored by the watchdog and it won't be started on the system reboot. In other words, you usually will want to write the service config instead of using this program. =head1 SEE ALSO L There is a similar program named C in Debian and some other Linux distributions which does daemonization and have some other powerful features. =head1 AUTHOR Vyacheslav Matyukhin =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2013 by Yandex LLC. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut