我有一个自己写的程序希望开机启动,我想用service的方式实现
[Unit]
Description=Foo
[Service]
ExecStart=/home/hh/rs485/a.out
[Install]
WantedBy=multi-user.target
不过我发现开机后运行几秒程序就直接杀掉了
如果我自己在bash里运行就不会有这个问题
这是为什么呢,顺带一提这个程序用了lddcutil库,
我有一个自己写的程序希望开机启动,我想用service的方式实现
[Unit]
Description=Foo
[Service]
ExecStart=/home/hh/rs485/a.out
[Install]
WantedBy=multi-user.target
不过我发现开机后运行几秒程序就直接杀掉了
如果我自己在bash里运行就不会有这个问题
这是为什么呢,顺带一提这个程序用了lddcutil库,
具体的日志消息呢?你这个程序启动后会自己fork然后退出吗?
没有在程序里写fork,然后我也没有在程序里写日志
是说systemd的日志。服务停止时它肯定会打日志的。
这咋看呀
然后如果我开机后自己运行service也不会有问题,这是一个权限问题吗
4月 18 17:29:27 hosthh a.out[3622]: [ 3622] (ddci_init) Done. Returning 0
4月 18 17:29:27 hosthh a.out[3622]: Library initialization complete.
4月 18 17:29:26 hosthh a.out[3622]: Starting. library built Not set at Not set, library_initialized=false, libopts=||
4月 18 17:29:26 hosthh a.out[3622]: Starting libddcutil. library built Not set at Not set. stdout_stderr_redirected=false
听起来是启动顺序的问题——你的程序需要访问网络吗?
sudo journalctl --since=启动的减一分钟时间 --until=退出的时间加一分钟
不需要
既然是自己写的程序,那可以把源码发出来看看吗?
main.c.log (6.6 KB)
然后还调用了一个目标文件,就不上传了
我刚刚重启,在看自重启来的日志时没有发现我最上方service相关的,也没有发现我程序退出的内容,但是我知道程序一定打开了一段时间,但是service是dead的
○ light.service - Foo
Loaded: loaded (/home/hh/.config/systemd/user/light.service; enabled; preset: enabled)
Active: inactive (dead)
呃,谁教你这么干的?!
你的用户服务就服务你这一个用户,哪来的多用户?一般写default.target就好了。
你真的发现了吗?还是你的幻觉?
user service 没有 multi-user 这么个 target,详见 arch wiki 以及 systemd 文档
因为程序运行后屏幕亮度会改变,所以很明显
然后为什么这么写吗,因为我是直接从wiki上抄来的
你是抄的系统服务吧?
屏幕亮度改变也可能是别的程序干的?服务运行了没有最直接的证据是systemd的日志。
emm我尝试了一下,发现把service移到系统文件夹/etc/systemd/system/就好了
我看还是一个权限问题
是是是,既然你看得这么准,以后你都自己看好了。再见。
和权限没有关系,这是把 user service 变成了 system service,详见 arch wiki Systemd/User 词条