如何在服务器每次运行时运行命令

如何在服务器每次运行时运行命令

我使用的是 Ubuntu 服务器 16.04。

我想每次服务器启动时运行特定的命令。我的意思是应该执行这个命令当服务器运行时(持续工作)。

此命令连接到 PHP 框架并启动 Web 应用程序。通常我可以通过转到应用程序所在的文件夹来运行此命令/var/www/html/app,然后执行php artisan serve --host ipadress

答案1

您可以为此目的创建一个cron条目。@reboot启动时会执行一次。

您可以将包含以下内容的文件放入/etc/cron.d

 @reboot    root    cd /var/www/html/app && /usr/bin/php artisan serve --host ipaddress

如果该命令不需要 root 权限,则应将 root 更改为其他用户。

或者,您可以运行crontab -e -u username 编辑应执行命令的用户的 crontab 并将此行插入其中:

 @reboot    cd /var/www/html/app && /usr/bin/php artisan serve --host ipaddress

因为该命令只有在成功&&时才会执行。cd

更新:如果它是一个服务器进程,您最好使用像 pylover 所示的 init 系统。我更喜欢 ubuntu 上的 systemd,因为他们只是更改了它,而且我不确定其他(暴发户)无需安装或配置任何东西即可使用多长时间。 init 系统使您能够启动和停止服务并查询其状态。

答案2

某些程序未设计为在用户连续输入的情况下运行并在第一时间断开与终端的连接。例如,Web 服务器响应 Web 请求,而不是用户输入。邮件服务器是此类应用程序的另一个示例。这些类型的程序称为守护进程。守护进程一词来自希腊神话,代表一种不善不恶的实体,它在无形中执行有用的任务。这就是为什么 BSD 吉祥物是一个穿着运动鞋和干草叉、看上去很开朗的守护进程。

让我们使用新贵:

创建一个名为:/etc/init/my-http-server.conf 的文件

description "my-http-server"

start on (filesystem)
stop on runlevel [016]

respawn
#setuid my_user_id
#setgid my_group_id
#chdir /opt/my/env

exec <your command>

pre-start script
  mkdir -p /var/run/my/
  chown -R my:www-data /var/run/my  
end script

#post-start script
#  sleep 6
#  chmod 776 /var/run/my/.s.my
#end script

欲了解更多信息,请参阅:新贵文档

然后使用start//stop命令restart来控制你的守护进程:

$ start my-http-server
$ stop my-http-server
$ restart my-http-server

有关在 ubuntu 16.04 上创建守护进程的可用选项的完整列表:请参阅这里

编辑1: 我有一些附加信息:The ubuntu 16.04 附带系统

因此,最佳实践是创建一个 systemd 守护进程。因为 rc.d、init.d 和 upstart 很快就会被弃用!

相关内容