创建 systemd 单元文件时出现问题

创建 systemd 单元文件时出现问题

我正在尝试创建一个 systemd 单元文件来替换命令

RAILS_ENV=development bundle exec rails resque:start_workers[2]

以便工人在机器启动时即可启动。我创建的文件是:

[Unit]
Description=background workers
After=httpd.service solr.service

[Service]
Environment=RAILS_ENV=development
ExecStart=/usr/local/bin/bundle exec rails resque:restart_workers[2]
User=deploy
WorkingDirectory=/opt/wonda/current
Environment=rvm_bin_path=/usr/local/rvm/bin
Environment=GEM_HOME=/usr/local/rvm/gems/ruby-2.5.1
Environment=SHELL=/bin/bash
Environment=IRBRC=/usr/local/rvm/rubies/ruby-2.5.1/.irbrc
Environment=MY_RUBY_HOME=/usr/local/rvm/rubies/ruby-2.5.1
Environment=LD_LIBRARY_PATH=/opt/rh/rh-php71/root/usr/lib64
Environment=PATH=/usr/local/rvm/gems/ruby-2.5.1/bin:/usr/local/rvm/gems/ruby-2.5.1@global/bin:/usr/local/rvm/rubies/ruby-2.5.1/bin:/usr/local/rvm/bin:/opt/rh/rh-php71/root/usr/bin:/opt/rh/rh-php71/root/usr/sbin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/sbin:/usr/local/sbin:/opt/puppetlabs/bin
Environment=GEM_PATH=/usr/local/rvm/gems/ruby-2.5.1:/usr/local/rvm/gems/ruby-2.5.1@global
Environment=DBUSER=wonda
Environment=DBPASS=***************

[Install]
WantedBy=multi-user.target

当我运行它时,系统似乎尝试启动工作程序,甚至给了我一个 pid,但没有显示它们正在运行我们已经向其添加了日志记录,但没有输出。

谁能告诉我我做错了什么?

答案1

您似乎正在使用rvm但必须手动设置很多东西。rvm-exec似乎是为此目的而设计的。如果您可以rvm-exec在终端中工作,那么当您将其转换为服务时,出错的可能性就会减少......

<检查剩余的事情是否有问题>

ExecStart=/usr/local/bin/bundle exec rails resque:restart_workers[2]

那么它从哪里来resque:restart_workers,嗯?

这听起来像是使用错误的准备协议的经典问题。然后当systemd杀死所有进程时感到惊讶,因为它是什么想法是你的主要进程,只是分叉然后退出。

如果可能的话,您使用 systemd 运行的命令应该不是分叉到“后台进程”。例如,如果您在终端中运行它,您想要一个在前台运行的命令。这将与隐含的默认[service]类型一起很好地工作Type=simple。尽管设置Type=exec可以提供更好的错误报告,但我不知道有什么理由不喜欢它:-)。

如果您不能 - 或者您需要准确地知道您的服务何时启动,并且它正确地实现Type=forking就绪协议,但没有比这更好的了 - 您可以添加Type=forking.

相关内容