Hi Daniel,
Thank you gudie, but it's running ok when manually start.
I try to check the perl.
David
在 2017年11月24日星期五 UTC+8下午9:58:54,Daniel Mantovani写道:
>
> Hi David, those 'Compilation failed in require at ... ' normally mean that
> perl is not able to find some modules at an "use" or "require" function
> call. You probably have to review those files at the lines mentioned, also
> which perl are using in each case (whether you are using system perl, or
> better installed your own user perl with perlbrew, or with plenv), and
> probably what directories are in your @INC array in each case.
>
> There are several ways to install modules in perl, and it is possible that
> when you run the script from inside the Unit file there are different
> versions of @INC leading to different directories an missing libraries in
> one of the cases.
>
>
>
> El viernes, 24 de noviembre de 2017, 7:34:02 (UTC-3), [email protected]
> escribió:
>>
>> Hi Daniel,
>> Thank you deltail adivces.
>> I test follow your guide, but it's error same as I report before, it's in
>> Mojolicious 7.57.
>> I once change Mojolicious to 6.58 to test, it's still error, error output:
>>
>> [root@localhost ~]# systemctl status mojo_test.service
>> ● mojo_test.service - My Mojolicious application
>> Loaded: loaded (/usr/lib/systemd/system/mojo_test.service; enabled;
>> vendor preset: disabled)
>> Active: failed (Result: exit-code) since Fri 2017-11-24 18:23:20 CST;
>> 6s ago
>> Process: 2822 ExecStart=/root/perl5/bin/hypnotoad /home/mojo_user/
>> mojo_test.pl (code=exited, status=2)
>> Process: 2820 ExecStartPre=/usr/bin/install -o mojo_user -g mojo_user
>> -d /var/log/mojo_test (code=exited, status=0/SUCCESS)
>> Process: 2819 ExecStartPre=/usr/bin/install -o mojo_user -g mojo_user
>> -d /run/mojo_test (code=exited, status=0/SUCCESS)
>>
>> Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: BEGIN
>> failed--compilation aborted at /usr/local/share/perl5/Mojo/Server/Daemon.pm
>> line 2.
>> Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: Compilation failed
>> in require at /usr/local/share/perl5/Mojo/Base.pm line 77.
>> Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: BEGIN
>> failed--compilation aborted at
>> /usr/local/share/perl5/Mojo/Server/Prefork.pm line 2.
>> Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: Compilation failed
>> in require at /usr/local/share/perl5/Mojo/Server/Hypnotoad.pm line 9.
>> Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: BEGIN
>> failed--compilation aborted at
>> /usr/local/share/perl5/Mojo/Server/Hypnotoad.pm line 9.
>> Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: Compilation failed
>> in require at /root/perl5/bin/hypnotoad line 20.
>> Nov 24 18:23:20 localhost.localdomain systemd[1]: mojo_test.service:
>> control process exited, code=exited status=2
>> Nov 24 18:23:20 localhost.localdomain systemd[1]: Failed to start My
>> Mojolicious application.
>> Nov 24 18:23:20 localhost.localdomain systemd[1]: Unit mojo_test.service
>> entered failed state.
>> Nov 24 18:23:20 localhost.localdomain systemd[1]: mojo_test.service
>> failed.
>>
>>
>> David
>>
>>
>> 在 2017年11月24日星期五 UTC+8上午8:45:57,Daniel Mantovani写道:
>>>
>>> Hi,
>>>
>>> Type=forking should work just fine, I am not sure that with Type=simple
>>> you will have all the functionallity you can get from systemd.
>>>
>>> A couple of advices though:
>>>
>>> 1) to get more confortable with systemd, you probably want to replicate
>>> as much as possible the example in Mojolicious::Guides::Cookbook. It just
>>> works very well (
>>> https://metacpan.org/pod/distribution/Mojolicious/lib/Mojolicious/Guides/Cookbook.pod#Hypnotoad
>>> )
>>>
>>> 2) But if you need to have pidfile and log files outside your working
>>> directory (like in /run/your_app/hypnotoad.pid and
>>> /var/log/your_app/production.log etc...), this simple approach will not
>>> work, because you probably don't want to run your application with
>>> permissions so high it will be able to write in /run or /var/log
>>> directories. Instead you normally use a user with minimal permissions.
>>> Besides as far as I know hypnotoad requires to have permission rights in
>>> an already created directory for the pid file and also for the log file.
>>>
>>> If that is the case, what you can do is modify your original service
>>> file as follows:
>>>
>>> (I am supossing here that "/home/mojo_test.pl" is a typo, I guess if
>>> your user is "mojo_user" for instance, the path to the app will be
>>> something like "/home/mojo_user/mojo_test.pl")
>>>
>>> mojo_test.service
>>> [Unit]
>>> Description=My Mojolicious application
>>> Requires=network.target
>>> After=network.target
>>>
>>> [Service]
>>> Type=forking
>>> PIDFile=/run/mojo_test/hypnotoad.pid
>>> User=mojo_user
>>> Group=mojo_user
>>> PermissionsStartOnly=True
>>> ExecStartPre=/usr/bin/install -o mojo_user -g mojo_user -d /run/mojo_test
>>> ExecStartPre=/usr/bin/install -o mojo_user -g mojo_user -d
>>> /var/log/mojo_test
>>> ExecStart=/usr/local/bin/hypnotoad /home/mojo_user/mojo_test.pl
>>> ExecReload=/usr/local/bin/hypnotoad /home/mojo_user/mojo_test.pl
>>> KillMode=process
>>>
>>> [Install]
>>> WantedBy=multi-user.target
>>>
>>> Please check that in your configuration file you have the pid set as
>>> /run/mojo_test/hypnotoad.pid, and that when
>>> you define the path for the log file it goes inside /var/log/mojo_test
>>> directory, something like
>>>
>>> sub startup {
>>> ...
>>> $self->app->log->path('/var/log/mojo_test/production.log');
>>> ...
>>>
>>> }
>>>
>>> About the zero downtime hypnotoad feature, with reload it should work
>>> without any problems (you can check that in the log file). If you restart
>>> instead of course it will kill the process and then start again, and you
>>> can check that also in the log file.
>>>
>>> One last thing, if you happen to have a recent version of systemd or you
>>> are allowed to install that (not my case unfortunatelly), you should check
>>> RuntimeDirectory= and LogsDirectory= directives. You can check if those are
>>> supported in your system with
>>>
>>> $ man systemd.directives
>>>
>>> If you have those, you will probably not need the ExecStartPre
>>> directives above, because the only thing these do is to create those
>>> directories.
>>>
>>> Hope it helps.
>>> BR,
>>> Daniel
>>>
>>> El jueves, 23 de noviembre de 2017, 13:36:10 (UTC-3), Boyd Duffee
>>> escribió:
>>>>
>>>> On 23/11/17 16:14, Dan Book wrote:
>>>> > I would not recommend running hypnotoad as a Type=simple service with
>>>> -f.
>>>> > This will not allow you to use hot-restarts via systemctl reload.
>>>>
>>>> Naively, I _can_ hot-restart with systemctl reload servicename, but now
>>>> you've got me worried.
>>>> Any idea why it's not advisable and is Type=forking the proper
>>>> solution?
>>>>
>>>> --
>>>> Boyd Duffee Keele University (01782) 734225
>>>> DevOps - Student Facing Systems
>>>>
>>>> Some people are born on third base and go through life
>>>> thinking they hit a triple - Barry Switzer
>>>>
>>>
--
You received this message because you are subscribed to the Google Groups
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.