]> git.proxmox.com Git - pve-manager.git/blob - bin/pvedaemon
create /var/run/dtach at pvedaemon startup
[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 PVE::APIDaemon::enable_debug() if $opt_debug;
35
36 # create dir for dtach sockets
37 mkdir "/var/run/dtach";
38
39 my $cpid;
40 my $daemon;
41 eval {
42 $daemon = PVE::APIDaemon->new(
43 LocalAddr => "127.0.0.1",
44 LocalPort => 85,
45 Listen => SOMAXCONN,
46 ReuseAddr => 1,
47 );
48 };
49
50 my $err = $@;
51
52 if ($err) {
53 syslog ('err' , "unable to start server: $err");
54 print STDERR $err;
55 exit (-1);
56 }
57
58 if ($opt_debug || !($cpid = fork ())) {
59
60 $SIG{PIPE} = 'IGNORE';
61 $SIG{INT} = 'IGNORE' if !$opt_debug;
62
63 $SIG{TERM} = $SIG{QUIT} = sub {
64 syslog ('info' , "server closing");
65
66 $SIG{INT} = 'DEFAULT';
67
68 unlink "$pidfile";
69
70 exit (0);
71 };
72
73 syslog ('info' , "starting server");
74
75 if (!$opt_debug) {
76 # redirect STDIN/STDOUT/SDTERR to /dev/null
77 open STDIN, '</dev/null' || die "can't read /dev/null [$!]";
78 open STDOUT, '>/dev/null' || die "can't write /dev/null [$!]";
79 open STDERR, '>&STDOUT' || die "can't open STDERR to STDOUT [$!]";
80 }
81
82 POSIX::setsid();
83
84 system ("echo > /var/lib/pve-manager/vmops"); # init vmops file
85
86 eval {
87 $daemon->start_server();
88 };
89 my $err = $@;
90
91 if ($err) {
92 syslog ('err' , "unexpected server error: $err");
93 print STDERR $err if $opt_debug;
94 exit (-1);
95 }
96
97 } else {
98
99 open (PIDFILE, ">$pidfile") ||
100 die "cant write '$pidfile' - $! :ERROR";
101 print PIDFILE "$cpid\n";
102 close (PIDFILE) ||
103 die "cant write '$pidfile' - $! :ERROR";
104 }
105
106 exit (0);
107
108 __END__
109
110 =head1 NAME
111
112 pvedaemon - the PVE configuration server
113
114 =head1 SYNOPSIS
115
116 pvedaemon [--debug]
117
118 =head1 DESCRIPTION
119
120 All configuration is done using this Server. The Server only
121 listens to a local address 127.0.0.1 port 85 for security
122 reasons.
123
124