![]() | 1 kuro1 2020-06-24 11:03:12 +08:00 ![]() 工作路径不同 |
2 GeruzoniAnsasu 2020-06-24 11:07:45 +08:00 ![]() https://github.com/stashapp/stash/blob/develop/docker/build/x86_64/Dockerfile 这不是有 docker 吗 开机把容器拉起来就好了,有这么纠结? |
![]() | 3 Tink PRO ![]() 完整路径 |
4 la0wei OP @kuro1 确实怀疑路径不同,但是我用的绝对路径 @GeruzoniAnsasu docker 编写 dockerfile 还是太麻烦了,go 在 docker 里似乎还有些小 trick,比如 gosu 什么的,不愿意搞 @Tink 使用的绝对路径 |
![]() | 5 RubyJack 2020-06-24 11:54:02 +08:00 ![]() 装一个 supervisor 写一个配置文件搞定 |
![]() | 6 no1xsyzy 2020-06-24 12:38:05 +08:00 ![]() @la0wei #4 可能 pwd 不同导致程序行为不同,或者 uid 不同,或者其他什么什么什么。 建议不要 nohup 而是采用 daemonizer,比如 screen supervisor systemd |
![]() | 8 kiracyan 2020-06-24 14:11:44 +08:00 ![]() systemd |
![]() | 9 vinsec 2020-06-24 14:25:35 +08:00 ![]() 用 systemd 守护 资源文件路径用绝对路径 |
10 la0wei OP |
11 54007 2020-06-24 16:13:20 +08:00 ![]() 我这里有一个例子吧 golang 程序注册成服务,开机启动 https://github.com/hellojukay/systemd-demo |
12 fanpei0121 2020-06-24 16:43:24 +08:00 ![]() pm2 管理进程 |
15 la0wei OP @54007 谢谢,晚上试试看 @fanpei0121 谢谢,这个没有试过,先尝试已掌握的知识上解决 @chenqh 谢谢,正是因为前台运行,会占用终端,在终端输出内容。我想转到后台,不用一直占着终端,以前我都是用 tmux 来解决的,但是不能重启,而且 ssh 你也知道这网络情况,上去一次真不容易 |
![]() | 16 ruanimal 2020-06-24 17:51:00 +08:00 ![]() @la0wei 你用 supervisor 就不会占用终端了, 用 supervisor 的程序不要以 daemon 模式运行,直接前台启动就好了 |
![]() | 17 keepeye 2020-06-24 18:10:07 +08:00 ![]() systemd 最优 supervisor 次之 其他的不建议 |
![]() | 18 caola 2020-06-24 18:16:19 +08:00 ![]() systemd 最好, 默认的 supervisor 进程还得靠 systemd 来守护。。。。 |
![]() | 19 no1xsyzy 2020-06-24 19:46:12 +08:00 ![]() @la0wei #10 我试了下 wybiral/tube 在 screen 下和 supervisor 下都正常…… 具体你应该 supervisorctl 进去用 tail 、tail <program> stderr 之类看看 log 。 |
20 la0wei OP @ruanimal 我也是这个想法,但是没有成功,一个参数都没敢加,如果我的配置文件没错的话,效果和终端运行应该是差不多的,奈何总是退出 @keepeye systemd 总是要学的,现在偷懒,想先把服务跑起来,以后再完善些 @caola supervisor 还是要简单一点的 @no1xsyzy 我的 vps 用的 root,supervisor 配置文件如下 [program:stash] command=/root/stash/stash-linux directory=/root/stash/ user=root numprocs=1 screen 一定是没问题的。以前都用 screen 或 tmux 来运行 golang 的程序,现在想要进步一点 tail -100 stash 后提示 Warning: sys.stdout.encoding is set to iso8859-1, so Unicode output may fail. Check your LANG and PYTHONIOENCODING environment settings. 正在搜索解决方案 |
![]() | 21 no1xsyzy 2020-06-24 20:21:13 +08:00 ![]() 请检查你的 locale,建议优先使用 UTF-8 https://wiki.archlinux.org/index.php/Locale_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 可能导致 encoding/decoding 时 raise 顺便再看下 stderr 吧 有可能 stash 依赖 stdout 是 tty 实在不行还有定时 RunOnce=screen -dmS session_name program argv 但这个做法是邪道。 其实如果不考虑访问日志和 attach 的话 systemd 更简单一点,反正大头早已经配好了。 |
22 la0wei OP @no1xsyzy 谢谢。编码已通过下面问题解决 export PYTHOnIOENCODING="UTF-8"$PYTHONIOENCODING 这次 supervisor tail 不报错了,不过内容为空 我也不是头铁硬要用 supervisor,只是好奇为何程序启动后有不同的现象。 |
23 la0wei OP |
![]() | 24 askfermi 2020-06-24 21:30:04 +08:00 ![]() 除了用 supervisor 之类的,我记得还可以直接把 golang 的程序注册成系统服务: https://github.com/kardianos/service |
![]() | 25 ttimasdf 2020-06-24 22:56:35 +08:00 ![]() 好好学学 docker,dockerfile 编写比 systemd unit 要容易的多,且更通用。一个 golang 用 systemd 还能糊一下,一个 python 加一堆依赖用 systemd 咋整?再调个 bash,source 一下 pyenv ? 而且根本就不涉及什么 gosu 啊这这那那的,创建 golang 程序的 docker 容器是最最简单的。直接从 scratch 镜像初始化一个完全空白的容器,把编译好的 binary 丢进去就成了。我手把手教你写 dockerfile 。 FROM scratch COPY ./your_exe /app/your_exe COMMAND /app/your_exe 直接一 build 一 run 就完了!什么 screen supervisord pm2 systemd 那都是上世纪的东西了,除了配置复杂,显得很有技术含量之外,没有什么实际的优点,而且完全不 portable 。 |
26 la0wei OP |