1
kuro1 2020-06-24 11:03:12 +08:00 1
工作路径不同
|
2
GeruzoniAnsasu 2020-06-24 11:07:45 +08:00 1
https://github.com/stashapp/stash/blob/develop/docker/build/x86_64/Dockerfile
这不是有 docker 吗 开机把容器拉起来就好了,有这么纠结? |
3
Tink 2020-06-24 11:39:11 +08:00 1
完整路径
|
4
la0wei OP @kuro1 确实怀疑路径不同,但是我用的绝对路径
@GeruzoniAnsasu docker 编写 dockerfile 还是太麻烦了,go 在 docker 里似乎还有些小 trick,比如 gosu 什么的,不愿意搞 @Tink 使用的绝对路径 |
5
RubyJack 2020-06-24 11:54:02 +08:00 2
装一个 supervisor 写一个配置文件搞定
|
6
no1xsyzy 2020-06-24 12:38:05 +08:00 1
@la0wei #4 可能 pwd 不同导致程序行为不同,或者 uid 不同,或者其他什么什么什么。
建议不要 nohup 而是采用 daemonizer,比如 screen supervisor systemd |
8
kiracyan 2020-06-24 14:11:44 +08:00 1
systemd
|
9
vinsec 2020-06-24 14:25:35 +08:00 1
用 systemd 守护 资源文件路径用绝对路径
|
10
la0wei OP |
11
54007 2020-06-24 16:13:20 +08:00 1
我这里有一个例子吧 golang 程序注册成服务,开机启动 https://github.com/hellojukay/systemd-demo
|
12
fanpei0121 2020-06-24 16:43:24 +08:00 1
pm2 管理进程
|
15
la0wei OP @54007 谢谢,晚上试试看
@fanpei0121 谢谢,这个没有试过,先尝试已掌握的知识上解决 @chenqh 谢谢,正是因为前台运行,会占用终端,在终端输出内容。我想转到后台,不用一直占着终端,以前我都是用 tmux 来解决的,但是不能重启,而且 ssh 你也知道这网络情况,上去一次真不容易 |
16
ruanimal 2020-06-24 17:51:00 +08:00 1
@la0wei 你用 supervisor 就不会占用终端了, 用 supervisor 的程序不要以 daemon 模式运行,直接前台启动就好了
|
17
keepeye 2020-06-24 18:10:07 +08:00 1
systemd 最优
supervisor 次之 其他的不建议 |
18
caola 2020-06-24 18:16:19 +08:00 1
systemd 最好,
默认的 supervisor 进程还得靠 systemd 来守护。。。。 |
19
no1xsyzy 2020-06-24 19:46:12 +08:00 1
@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 1
请检查你的 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 1
除了用 supervisor 之类的,我记得还可以直接把 golang 的程序注册成系统服务: https://github.com/kardianos/service
|
25
ttimasdf 2020-06-24 22:56:35 +08:00 1
好好学学 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 |