我的文件夹中有以下脚本/etc/systemd/system/
。
# Start the ruby on rails app on boot
[Unit]
Description=Start Ruby Online Ordering Application
[Service]
Type=simple
RemainAfterExit=yes
Username=root
PIDFile=/home/deviant/www/tmp/pids/server.pid
WorkingDirectory=/home/deviant/www
ExecStart=/home/deviant/www/run.sh
TimeoutSec=300
[Install]
WantedBy=multi-user.target
经许可-rw-r--r-- 1 root root
这运行sh脚本包含
#!/bin/sh
service httpd stop
rails s -p 80 -d
经许可-rwxrwxr-x 1 root root
简而言之,它应该在服务器重新启动时启动 Ruby 应用程序,但是,它似乎不起作用。
在哪里可以查看系统错误日志?什么会导致它在服务器重新启动时无法启动?
我尝试将脚本更改为:
[Service]
Type=oneshot
RemainAfterExit=yes
PIDFile=/home/deviant/www/tmp/pids/server.pid
WorkingDirectory=/home/deviant/www
ExecStart=/home/deviant/www/run.sh
TimeoutSec=300
我现在继续systemctl enable....
“服务”部分中的未知左值“用户名”...具有除“否”之外的“重新启动=”设置,这对于“类型=一次性”服务是不允许的。拒绝。
我什至不确定这意味着什么。这是什么意思?
答案1
如果您的 Ruby 应用程序与该httpd
服务冲突,我不明白为什么您应该保持该服务运行只是为了在您的 中停止它run.sh
:只需运行systemctl disable httpd
一次,它甚至不会启动。
现在您可以完全删除您的内容并使用和run.sh
制作您的服务文件。注意删除该选项;这是有意为之的,并且与.Type=simple
ExecStart=/full/path/to/rails s -p 80
-d
Type=simple
为了保险起见,你可以添加Conflicts=httpd.service
告诉systemd
你的服务httpd
不能同时运行。
所以你的/etc/systemd/system/my-ruby-application.service
应该看起来像这样:
# Start the ruby on rails app on boot
[Unit]
Description=Start Ruby Online Ordering Application
Conflicts=httpd.service
[Service]
Type=simple
Username=root
PIDFile=/home/deviant/www/tmp/pids/server.pid
WorkingDirectory=/home/deviant/www
ExecStart=/some/full/path/rails s -p 80
TimeoutSec=300
[Install]
WantedBy=multi-user.target
要systemd
在服务因某种原因失败时重新启动服务,请添加Restart=
适合您的要求的选项(请参阅 中的表 2 man systemd.service
)。如果您这样做,建议还添加 aRestartSec=<sensible restart delay>
以避免您的服务器因以 0.1 秒的间隔(默认)重复重新启动尝试而陷入困境,如果您的服务在每次重新启动尝试后碰巧持续失败,可能是因为您编辑了其配置文件并且意外地编辑了其配置文件犯了一个错误。
编辑my-ruby-application.service
文件后,您应该运行systemctl daemon-reload
,然后systemctl disable httpd
运行 ,systemctl stop httpd
如果您还没有这样做,最后运行systemctl enable my-ruby-application
和systemctl start my-ruby-application
。
答案2
您是否重新加载了 systemctl 守护进程?
systemctl daemon-reload
systemctl enable service_name
我知道 Centos 发行版保留启动日志
cat /var/log/boot.log