这是我的/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 相比命令行接口做不是将当前工作目录更改为启动脚本所在的目录。
<?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