我想在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
答案 0 :(得分:0)
问题已解决。 Frame3dd在/ tmp中创建临时文件。其中一些文件是使用root创建的。当我使用非root帐户运行Frame3dd时,程序退出并显示错误代码12,因为它不会覆盖这些文件。