如何开机自启 Seata Server 和 Nacos(或者说 Tomcat/基于 Tomcat 开发的程序),试了好多方案都不行

2022-12-06 13:51:53 +08:00
 LxnChan

如题,Seata 和 Nacos 的自启问题。

很久之前我提过一个类似的问题,https://www.v2ex.com/t/887703 ,当时就是需要执行 Tomcat 的启动脚本,不过当时用 rc-local 解决了,现在却怎么也启动不了了。

这种基于 tomcat 开发的程序大多是有一个启动脚本,执行该脚本后后会自动在后台启动对应的程序。


现在已经尝试过的方案:

  1. rc-local ,无法启动且没法调试,不知道哪里出错;
  2. crontab(@reboot),同上;
  3. Systemd ,有报错,但是不知道如何解决

systemd 的 service 文件:

[Unit]
Description = NacOS
After = network.target syslog.target
Wants = network.target

[Service]
Type=forking
Environment = "JAVA_HOME=/usr/local/jdk1.8.0_291"
Environment = "JRE_HOME=/usr/local/jdk1.8.0_291/jre"
Environment = "CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib"
Environment = "PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin"
ExecStart=/opt/nacos/bin/startup.sh -m standalone
#ExecStop=/opt/nacos/bin/shutdown.sh

[Install]
WantedBy = multi-user.target

报错:

● nacos.service - NacOS
   Loaded: loaded (/etc/systemd/system/nacos.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2022-12-06 13:35:11 CST; 1min 47s ago
  Process: 1048 ExecStart=/opt/nacos/bin/startup.sh -m standalone (code=exited, status=0/SUCCESS)
 Main PID: 1278 (code=exited, status=127)

Dec 06 13:35:09 localhost.localdomain systemd[1]: Starting NacOS...
Dec 06 13:35:09 localhost.localdomain startup.sh[1048]: /opt/nacos/bin/startup.sh: line 19: uname: command not found
Dec 06 13:35:09 localhost.localdomain startup.sh[1048]: /opt/nacos/bin/startup.sh: line 108: sed: command not found
Dec 06 13:35:11 localhost.localdomain startup.sh[1048]: /usr/local/jdk1.8.0_291/bin/java  -Xms2048m -Xmx2048m -Xmn256m -Dnacos.st...:+Prin
Dec 06 13:35:11 localhost.localdomain startup.sh[1048]: nacos is starting with standalone
Dec 06 13:35:11 localhost.localdomain startup.sh[1048]: nacos is starting ,you can check the /opt/nacos/logs/start.out
Dec 06 13:35:11 localhost.localdomain systemd[1]: Started NacOS.
Dec 06 13:35:11 localhost.localdomain systemd[1]: nacos.service: main process exited, code=exited, status=127/n/a
Dec 06 13:35:11 localhost.localdomain systemd[1]: Unit nacos.service entered failed state.
Dec 06 13:35:11 localhost.localdomain systemd[1]: nacos.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

/opt/nacos/logs/start.out内容:

/usr/local/jdk1.8.0_291/bin/java  -Xms2048m -Xmx2048m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/local/jdk1.8.0_291/jre/lib/ext:/usr/local/jdk1.8.0_291/lib/ext -Xloggc:/opt/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/opt/nacos/plugins/health,/opt/nacos/plugins/cmdb -Dnacos.home=/opt/nacos -jar /opt/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/opt/nacos/conf/ --logging.config=/opt/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
/opt/nacos/bin/startup.sh: line 142: nohup: command not found
1921 次点击
所在节点    Linux
9 条回复
vibbow
2022-12-06 15:50:57 +08:00
盲猜是环境变量不对
roiding
2022-12-06 17:17:59 +08:00
找不到 nohup 哇噢 好神奇
zbatman
2022-12-06 17:24:03 +08:00
Description = NacOS
看到这句话我还寻思又出什么新 OS 了
wangyu17455
2022-12-06 19:24:39 +08:00
实在不行塞 docker 里用 docker 的自启?
tairan2006
2022-12-06 19:54:09 +08:00
应该就是环境变量问题,你手动能启动的话就不需要设置那么多环境变量啊。
iluolSNS
2022-12-06 23:21:25 +08:00
我是直接 docker 省事
yso
2022-12-07 00:58:31 +08:00
再写一个 shell 脚本,把环境变量放进去呢?
ec0
2022-12-07 01:31:34 +08:00
Environment 不支持变量,所以你的 4 个 Environment 只有前两个是正常的,后面两个 Environment 里的变量没有展开
比如 PATH 的内容就是 “$PATH:$JAVA_HOME/bin:$JRE_HOME/bin” ,这会导致命令无法找到,从而报错

所以你可以

1. 不使用变量,手动展开变量,比如
Environment = "CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib"
改成
Environment = "CLASS_PATH=.:/usr/local/jdk1.8.0_291/lib/dt.jar:/usr/local/jdk1.8.0_291/lib/tools.jar:/usr/local/jdk1.8.0_291/jre/lib"

2. 如 7F 所说 ,再写一个 shell 脚本,把环境变量放进去,在新 shell 脚本调用 startup.sh ,或者直接修改 startup.sh ,在 startup.sh 的开头设置环境变量
ec0
2022-12-07 01:42:10 +08:00
还有,修改 Service 后需要 systemctl daemon-reload

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/900484

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX