2016-07-07 83 views
1

我试图让一个服务器的NodeJS上启动时运行,所以我创建了以下systemd单元文件:Systemd服务无法启动时

[Unit] 
Description=TI SensorTag Communicator 
After=network.target 

[Service] 
ExecStart=/usr/bin/node /home/pi/sensortag-comm/sensortag.js 
User=root 

[Install] 
WantedBy=multi-user.target 

我不知道我在做什么错在这里。在nodejs脚本启动之前,它似乎失败了,因为没有记录发生。我的脚本依赖于MySQL 5.5(我认为这是我遇到问题的地方)。任何洞察力,甚至不同的解决方案,将不胜感激。

另外,一旦我登录系统,它就会正常运行。

更新

已启用该服务,并通过journalctl记录。我将在7/11/16更新结果。

不知道为什么它第一次没有工作,但在检查journalctl时,MySQL没有启动的问题是100%。我再次将其更改为After=MySQL.service,它完美运作!

回答

2

如果在journalctl的输出中根本没有提及服务,可能表示服务不是已启用在引导时启动。

让您在下次开机测试前运行systemctl enable my-unit-name。另外,由于你依赖于MySQL正在运行,所以你应该声明如下:After=mysql.service。确切的服务名称可能取决于您的Linux发行版,您没有说明。

添加User=root不会添加任何内容,因为无论如何,系统单位默认情况下都会以root身份运行。

当你说“它失败了”时,你没有指定它在启动时是失败还是在systemctl start my-unit-name下运行测试。

尝试启动服务后,如果运行journalctl -u my-unit.name.service,应该记录日志。

您可能还会考虑将StandardOutput=journal添加到您的设备文件中,以确保您捕获正在运行的服务的输出。

+0

对不起,我不清楚,服务已启用,它试图启动启动。我直到星期一才能访问机器,然后用'journalctl -u sensortag.service'的结果更新问题。需要注意的是,mysql 5.5使用systemv而不是systemd(该机器是一个树莓派,我不倾向于设置backports),所以尝试使用'After = mysql.service'似乎无法解决此问题,但也许这个问题在别处。再次感谢迄今为止的帮助。 – phelpsiv