如何让linux开机自动运行命令,且执行时指定目录运行
在golang语言中,我规定了 ./main 的同级目录中 写入db.sqlite,
我希望 /root/main 运行后,写入/root/db.sqlite
我在alpine linux中的 /etc/local.d/gin.start 中写入
尝试1:
nohup /root/main & //结果db.sqlite 写入到了/etc/local.d/ 目录中
尝试2:
nohup sh -c "cd /root/main;sh" & //结果不运行
尝试3:
nohup sh /root/start.sh & //start.sh中 cd /root ; ./main 也不行
目前我打了一个docker镜像,在镜像中 workerdir 就ok
@胡椒舰长,写脚本进行包装啊
@胡椒舰长,注意,alpine可能没有
/bin/bash
。如果遇到难以理解的脚本问题,可以用
docker -it
进shell手动执行调试。@胡椒舰长,为了减少参数传递导致的问题,可以把脚本设为可执行然后直接运行。
然后你可以在xxx.log里检查发生了什么
@胡椒舰长,当然,还可以考虑systemd服务。
@胡椒舰长,
这是个啥。。
cd
到一个文件?你会不会是想写:反正我在 Linux Deploy 里想自启应用,用的是 sysv,支持启动时切换
uid
gid
workdir
。自启脚本长这样(节选):@老虎会游泳,我是希望开机自动启动, 因为alpien linux 在/etc/local.d/*.start 文件都会在开机的时候执行,
我直接执行 ./main 貌似 好像是基于 /etc/local.d/运行目录,而不是 main所在的 /root目录
我用nohup 他直接不执行,我怀疑是不是刚开机nohup服务都没启动,导致没执行的,
我都是用是sh,不用bash。而且我的linux不是docker,我是把宿主机刷了alpine linux操作系统,因为宿主机内存只有512Mb,alpine linux 开机才50Mb
>nohup sh -c "cd /root/ && ./main" &
这样也是不执行的,我试了 &&和 ;
@胡椒舰长,按老虎在 4楼 说的那样,瞅瞅日志呗
@胡椒舰长,请看日志,不要猜测。
还有,既然在/etc/local.d/*.start 文件都会在开机的时候执行,那么你何必加nohup,就算不加不也可以执行吗?
@胡椒舰长,写入日志的方法:
猜测一千次不如看日志一次。
其中
2>&1
用于把标准错误写入和标准输出相同的文件,并不表示后台运行。如果想后台运行,还是得自己在结尾加&
。@胡椒舰长,如果日志显示程序已经启动了,但是你看的时候程序却未在运行,说明不应该让程序后台运行。此时,删除
nohup
和&
就可以解决问题。