Ruby在ubuntu上作为服务(systemd)运行时执行系统命令

时间:2020-10-09 08:20:07

标签: ruby systemd

我想在Ubuntu中将ruby程序作为服务运行,但是在我的代码中,我有一个系统调用来执行外部程序:

system(frame3dd, 'file.csv', 'file.out')

当我在终端中运行程序时,它工作得很好,但是当我将其作为服务运行时,frame3dd返回错误代码12。根据手册,这意味着: 12:打开临时清除的输入数据文件进行写入时出错

Oct 09 10:56:57 vps594898 ruby[6900]:  FRAME3DD version: 20140514+
Oct 09 10:56:57 vps594898 ruby[6900]:  Analysis of 2D and 3D structural 
frames with elastic and geometric stiffness.
Oct 09 10:56:57 vps594898 ruby[6900]:  http://frame3dd.sf.net
Oct 09 10:56:57 vps594898 ruby[6900]:  GPL Copyright (C) 1992-2014, Henri P. 
Gavin
Oct 09 10:56:57 vps594898 ruby[6900]:  This is free software with absolutely 
no warranty.
Oct 09 10:56:57 vps594898 ruby[6900]:  For details, see the GPL license file, 
LICENSE.txt
Oct 09 10:56:57 vps594898 ruby[6900]: false
Oct 09 11:42:19 vps594898 ruby[14314]: #<Process::Status: pid 14415 exit 12>

系统配置文件:

[Unit]
Description=BK Geveldragers staging

[Service]
User=server
Group=server
PIDFile=/home/server/bk_projecten/staging/server.pid
WorkingDirectory=/home/server/bk_projecten/staging
Restart=always

ExecStart=/usr/bin/ruby server.rb
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target

1 个答案:

答案 0 :(得分:0)

问题已解决。 Frame3dd在/ tmp中创建临时文件。其中一些文件是使用root创建的。当我使用非root帐户运行Frame3dd时,程序退出并显示错误代码12,因为它不会覆盖这些文件。