我创建了一个小型的go程序,该程序使用these go绑定来记录来自默认麦克风的一些命令并采取相应的措施。它可以作为独立的二进制文件正常运行(作为普通用户和root用户),但是当我尝试将其转换为systemd单元时,go绑定中的Capture
函数失败,错误提示为connection refused
。>
作为systemd服务运行时,程序无法捕获麦克风输入。以下是从here复制粘贴的单位文件。
[Unit]
Description=Commander service providing voice commands
[Service]
ExecStart=/path/to/binary/binary.sh
[Install]
WantedBy=multi-user.target
binary.sh是一个简单的Shell脚本,用于为go二进制文件提供环境变量。脚本在下面
#!/bin/bash
cd /path/to/binary
env LD_LIBRARY_PATH=/usr/local/lib ./binary > stdout 2> stderr
LD_LIBRARY_PATH
共享库需要pocketsphinx
,该共享库用于识别音频中的命令。
我认为单位文件有问题,但我不知道它是什么。整个项目可以在here中找到。
任何见解都会有所帮助。谢谢。
答案 0 :(得分:0)
pulseaudio是一个守护程序,可能尚未启动...用
更新您的binary.sh
sleep 10
echo about to determine whether pulseaudio is up and running
pulseaudio --check
echo if pulseaudio is running above check silently returns
在启动您的golang二进制文件之前