]> git.proxmox.com Git - pve-manager.git/blob - bin/pvedaemon
imported from svn 'pve-manager/pve2'
[pve-manager.git] / bin / pvedaemon
1 #!/usr/bin/perl -T -w
2
3 $ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
4
5 delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
6
7 use strict;
8 use Getopt::Long;
9 use POSIX ":sys_wait_h";
10 use Socket;
11 use PVE::SafeSyslog;
12 # use PVE::Config; # fixme
13 use PVE::APIDaemon;
14
15 my $pidfile = "/var/run/pvedaemon.pid";
16 my $opt_debug;
17
18 initlog ('pvedaemon');
19
20 if (!GetOptions ('debug' => \$opt_debug)) {
21 die "usage: $0 [--debug]\n";
22 }
23
24 $SIG{'__WARN__'} = sub {
25 my $err = $@;
26 my $t = $_[0];
27 chomp $t;
28 syslog('warning', "WARNING: %s", $t);
29 $@ = $err;
30 };
31
32 $0 = "pvedaemon";
33
34 my $cpid;
35 my $daemon;
36 eval {
37 $daemon = PVE::APIDaemon->new(
38 LocalAddr => "127.0.0.1",
39 LocalPort => 85,
40 Listen => SOMAXCONN,
41 ReuseAddr => 1,
42 );
43 };
44
45 my $err = $@;
46
47 if ($err) {
48 syslog ('err' , "unable to start server: $err");
49 print STDERR $err;
50 exit (-1);
51 }
52
53 if ($opt_debug || !($cpid = fork ())) {
54
55 $SIG{PIPE} = 'IGNORE';
56 $SIG{INT} = 'IGNORE' if !$opt_debug;
57
58 $SIG{TERM} = $SIG{QUIT} = sub {
59 syslog ('info' , "server closing");
60
61 $SIG{INT} = 'DEFAULT';
62
63 unlink "$pidfile";
64
65 exit (0);
66 };
67
68 syslog ('info' , "starting server");
69
70 if (!$opt_debug) {
71 # redirect STDIN/STDOUT/SDTERR to /dev/null
72 open STDIN, '</dev/null' || die "can't read /dev/null [$!]";
73 open STDOUT, '>/dev/null' || die "can't write /dev/null [$!]";
74 open STDERR, '>&STDOUT' || die "can't open STDERR to STDOUT [$!]";
75 }
76
77 POSIX::setsid();
78
79 system ("echo > /var/lib/pve-manager/vmops"); # init vmops file
80
81 eval {
82 $daemon->start_server();
83 };
84 my $err = $@;
85
86 if ($err) {
87 syslog ('err' , "unexpected server error: $err");
88 print STDERR $err if $opt_debug;
89 exit (-1);
90 }
91
92 } else {
93
94 open (PIDFILE, ">$pidfile") ||
95 die "cant write '$pidfile' - $! :ERROR";
96 print PIDFILE "$cpid\n";
97 close (PIDFILE) ||
98 die "cant write '$pidfile' - $! :ERROR";
99 }
100
101 exit (0);
102
103 __END__
104
105 =head1 NAME
106
107 pvedaemon - the PVE configuration server
108
109 =head1 SYNOPSIS
110
111 pvedaemon [--debug]
112
113 =head1 DESCRIPTION
114
115 All configuration is done using this Server. The Server only
116 listens to a local address 127.0.0.1 port 85 for security
117 reasons.
118
119