Upstart-服务启动后立即停止

Upstart-服务启动后立即停止

这是我的/etc/init/jobname.conf文件:

start on startup
stop on shutdown
respawn

script
    php /home/inersha/file.php
end script

当我启动该服务时,它立即停止:

$ sudo service jobname start
jobname start/running, process 16703
$ sudo service jobname status
jobname stop/waiting

当我php /home/inersha/file.php从命令行运行时,它运行正常。此外,我在本地计算机上有完全相同的设置,它也能正常工作......它只是在我的远程服务器上一直停止。

为什么会发生这种情况?

答案1

我检查了一下/var/log/upstart/JOBNAME.log,看看到底发生了什么事。

事实证明我有一个相对链接file.php,如下所示:

 <?php
 include '../somethin.php'
 ?>

我认为这个 upstart 以 root 身份执行此脚本/,因此无法遵循相对链接。因此,我将其更改为绝对链接,它工作正常:

 <?php
 include '/home/inersha/folder/somethin.php'
 ?>

答案2

与其他 SAPI 相比命令行接口不是将当前工作目录更改为启动脚本所在的目录。

一种可移植的方法是使用函数真实路径并且恒定__DIR__

<?php
require_once realpath(__DIR__ . '../somethin.php')

简而言之,运行时命令行接口路径相对于 PHP 进程启动的目录:

ubuntu@h6fk4:~$ cat test.php include-me.php 
<?php
echo getcwd() . PHP_EOL;
require_once './include-me.php';
<?php
echo 'I been included!' . PHP_EOL;
ubuntu@h6fk4:~$ php test.php 
/home/ubuntu
I been included!
ubuntu@h6fk4:~$ cd /srv/
ubuntu@h6fk4:/srv$ php ~/test.php 
/srv
PHP Warning:  require_once(./include-me.php): failed to open stream: No such file or directory in /home/ubuntu/test.php on line 3
PHP Fatal error:  require_once(): Failed opening required './include-me.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/ubuntu/test.php on line 3

使用 upstart设置用户标识设置组ID按照@bc2946088 的建议,在运行作业进程之前将节更改为用户/组。

相关内容