#mycgiapp.psgi #!/usr/bin/perl use strict; use Plack::Request; use forks::BerkeleyDB; use XML::Simple; use JSON qw(encode_json); use MIME::Base64 qw(encode_base64); use DBI; use SOAP::Lite(); use POSIX qw(ceil); use Data::Dumper; $XML::Simple::PREFERRED_PARSER='XML::Parser'; $SOAP::Constants::DO_NOT_USE_CHARSET = 1; my $app = sub { my $env = shift; my $req = Plack::Request->new($env); my $input=$req->parameters(); my($out)=GetOutput($input); if ($input->{'format'} eq 'json'){ my $json=JSON->new->utf8->encode($out); return [ 200, ['Content-Type' => 'application/json'], [ $json ], ]; } else{ my $xml=XMLout($out,RootName=>"Result",keepRoot=>0,NoAttr=>1, KeyAttr => []); return [ 200, ['Content-Type' => 'text/xml'], [ $xml ], ]; } }; sub GetOutput { #CGI script code # Runs multiple threads/forks to collect data from various apis with SOAP calls return ($headers,$out); } #RAN IT WITH plackup C:\httpd\myapp>plackup -D -r --host 192.168.110.181 --port 5010 --app myapp.psgi Watching ./lib myapp.psgi for file updates. HTTP::Server::PSGI: Accepting connections at http://192.168.110.181:5010/ 10.1.1.4 - - [11/Sep/2014:11:33:57 +0530] "GET / #### use Ubic::Service::Starman; my $Config={ server_args => { 'listen' =>'10.1.1.5:8080', 'workers' =>16, 'backlog' =>1024, 'max-requests'=>1000, 'daemonize' =>'', 'user' =>'perl', 'access-log' =>'/var/log/psgi/access.log', 'error-log' =>'/var/log/psgi/error.log', 'app' =>'/var/www/myapp/myapp.psgi', }, app => "/var/www/myapp/myapp.psgi", status => sub {}, ubic_log=> '/var/log/psgi/ubic.log', stdout => '/var/log/psgi/stdout.log', stderr => '/var/log/psgi/stderr.log', user =>'perl', group =>'perl', cwd =>'/var/www/myapp', pidfile =>'/var/log/psgi/myapp.pid', }; return Ubic::Service::Starman->new($Config); # ubic status myapp # ubic myapp not running Can't locate /var/www/myapp/Config.pl in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /var/www/myapp/myapp.psgi line 166. #### use Ubic::Service::Plack; my $Config={ server => "Plack::Handler::Starman", server_args => { 'listen' =>'10.1.1.5:8080', 'workers' =>16, 'backlog' =>1024, 'max-requests'=>1000, 'daemonize' =>'', 'reload' =>'', 'user' =>'perl', 'access-log' =>'/var/log/psgi/access.log', 'error-log' =>'/var/log/psgi/error.log', 'app' =>'/var/www/myapp/myapp.psgi', }, app => '/var/www/myapp/myapp.psgi', status => sub {}, ubic_log=> '/var/log/psgi/ubic.log', stdout => '/var/log/psgi/stdout.log', stderr => '/var/log/psgi/stderr.log', user =>'perl', group =>'perl', cwd =>'/var/www/myapp/', pidfile =>'/var/log/psgi/domfares.pid', }; return Ubic::Service::Plack->new($Config); #### Starman error log 2014/09/12-14:25:52 Worker processes cleaned up 2014/09/12-14:25:52 Server closing! Process Backgrounded 2014/09/12-14:26:53 Starman::Server (type Net::Server::PreFork) starting! pid(20742) Binding to TCP port 8080 on host 10.1.1.5 with IPv4 2014/09/12-14:26:53 Can't connect to TCP port 8080 on 10.1.1.5 [Address already in use] at line 68 in file /usr/local/share/perl5/Net/Server/Proto/TCP.pm 2014/09/12-14:26:53 Received QUIT. Running a graceful shutdown 2014/09/12-14:26:53 Worker processes cleaned up 2014/09/12-14:26:53 Server closing! ##Ubic log [Fri Sep 12 14:24:53 2014] 19878 guardian name: ubic-guardian starman --backlog 1024 --access-log /var/log/psgi/access.log --max-requests 1000 --app /var/www/myapp/myapp.psgi --error-log /var/log/psgi/error.log --workers 16 --reload --listen 10.1.1.5:8080 --user perl --server Plack::Handler::Starman --daemonize /var/www/myapp/myapp.psgi [Fri Sep 12 14:24:53 2014] 19878 obtaining lock... [Fri Sep 12 14:24:53 2014] 19878 got lock [Fri Sep 12 14:24:53 2014] 19878 guardian pid: 19878 [Fri Sep 12 14:24:53 2014] 19878 daemon pid: 19879 [Fri Sep 12 14:24:53 2014] 19878 child guid: 2916133834 [Fri Sep 12 14:25:52 2014] 19878 sending SIGTERM to 19879 [Fri Sep 12 14:25:52 2014] 19878 daemon 19879 exited [Fri Sep 12 14:25:52 2014] 20296 guardian name: ubic-guardian starman --backlog 1024 --access-log /var/log/psgi/access.log --max-requests 1000 --app /var/www/myapp/myapp.psgi --error-log /var/log/psgi/error.log --workers 16 --reload --listen 10.1.1.5:8080 --user perl --server Plack::Handler::Starman --daemonize /var/www/myapp/myapp.psgi [Fri Sep 12 14:25:52 2014] 20296 obtaining lock... [Fri Sep 12 14:25:52 2014] 20296 got lock [Fri Sep 12 14:25:52 2014] 20296 guardian pid: 20296 [Fri Sep 12 14:25:52 2014] 20296 daemon pid: 20297 [Fri Sep 12 14:25:52 2014] 20296 child guid: 2916139767 [Fri Sep 12 14:26:52 2014] 20296 sending SIGTERM to 20297 [Fri Sep 12 14:26:52 2014] 20296 daemon 20297 exited [Fri Sep 12 14:26:52 2014] 20738 guardian name: ubic-guardian starman --backlog 1024 --access-log /var/log/psgi/access.log --max-requests 1000 --app /var/www/myapp/myapp.psgi --error-log /var/log/psgi/error.log --workers 16 --reload --listen 10.1.1.5:8080 --user perl --server Plack::Handler::Starman --daemonize /var/www/myapp/myapp.psgi [Fri Sep 12 14:26:52 2014] 20738 obtaining lock... [Fri Sep 12 14:26:52 2014] 20738 got lock [Fri Sep 12 14:26:52 2014] 20738 guardian pid: 20738 [Fri Sep 12 14:26:52 2014] 20738 daemon pid: 20739 [Fri Sep 12 14:26:52 2014] 20738 child guid: 2916145800 [Fri Sep 12 14:26:55 2014] 20738 sending SIGTERM to 20739 [Fri Sep 12 14:26:55 2014] 20738 daemon 20739 exited