查询服务状态显示dead
start之后显示这样
还请各位同志帮忙解决🙏🏻🙏🏻
可以参考我的博客中多个关于ubuntu开机自启动的配置!
你的问题是这样的,因为你的启动程序使用了UI界面,然后,你希望使用system启动他。
linux系统和window系统有区别。他启动以后需要启动UI界面环境,你的linux系统在没有启动UI界面程序就已经启动了你的程序导致,你是用这个方法不能启动。
str=$"\n"
echo '123456' | sudo -S nohup sh /usr/local/node/nodered.sh >/dev/null 2>&1 &
sstr=$(echo $str)
echo $sstr
echo "node-red 启动完成"
此处有一个小技巧,为了解决nohup方式后台启动程序,会需要手动点一下回车的问题,在原nodered.sh上加了输出换行符的语句。(在nodered.sh中没起作用,所以放到了start.sh中。。。)
脚本需要以非阻塞方式运行,不能在前台运行而阻塞启动进程
从的启动日志中你的错误来看的话,是报了一个connect refused错误,意思是连接被拒绝了,那么你要打开你的脚本,看下里面有没有用到什么连接的东西。其次,就是还有一个无法解析参数的问题,看下你的脚本中是否使用了参数,语法以及参数的使用上是否存在问题。
或者你可以参考下其他的一些解决方法,比如:
Ubuntu18.04 开机自启动(需要 sudo 权限):https://www.cnblogs.com/shuiche/p/15481924.html
Ubuntu18.04开机自动运行脚本失败以及解决方法
初始版本的rc.local.service并没有[Install]段,需要添加
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
参考[2],在/etc/目录下创建rc.local
sudo vim /etc/rc.local
以下回答来自GPT生成,请参考:
根据你提供的信息,运行自定义脚本时遇到了问题。错误日志显示了以下信息:
Loaded: loaded (/etc/systemd/system/auto_fly.service; enabled; vendor preset: enabled)
Active: failed (Result: exitcode) since Thu 2023-07-06 17:33:30 CST; 25s ago
Process: 3640 ExecStart=/home/abc235/catkin ws/auto mission -sitl.sh (code=exited, status=1/FAILURE)
Main PID: 3640 (code=exited, status=1/FAILURE)
无法初始化服务器: 无法连接: 连接被拒绝
启动Python节点...
无法初始化服务器: 无法连接: 连接被拒绝
Starting sitl.launch..
auto fly.service: Main process exited, code=exited, status=1/FAILURE
auto fly.service: Failed with result 'exit-code'.
根据这些信息,可以看出脚本无法连接到服务器,并且在解析参数和初始化服务器时遇到了问题。这可能是由于服务器连接被拒绝或无法打开显示导致的。可能的解决方法包括:
检查服务器连接:确保服务器连接正确并且允许脚本连接。检查网络设置、防火墙和其他相关配置。
检查显示设置:如果脚本需要使用显示,请确保显示正确配置并且可以连接。你可以尝试使用远程桌面工具连接到服务器并检查显示设置。
查看脚本参数:检查脚本参数是否正确,并确保脚本可以正确解析和处理这些参数。
如果问题仍然存在,你可能需要更详细地检查脚本和服务器配置以解决问题。
创建服务文件:在 /etc/systemd/system/ 目录下创建一个以 .service 结尾的服务文件,例如 your_service_name.service。
编辑服务文件:使用文本编辑器打开服务文件,并确保包含以下内容:
Unit]
Description=Your Service Description
After=network.target
[Service]
ExecStart=/path/to/your_script.sh
WorkingDirectory=/path/to/working_directory
User=username
Group=groupname
Type=simple
Restart=always
[Install]
WantedBy=default.target
确保将 Your Service Description 替换为对服务的简短描述,/path/to/your_script.sh 替换为您实际的脚本文件路径,/path/to/working_directory 替换为脚本文件的工作目录,username 和 groupname 替换为脚本文件所属的用户和组。
保存并关闭服务文件。
启用服务:在终端中运行以下命令启用您创建的服务:
sudo systemctl start your_service_name.service
确保没有报错并且服务正常启动。
验证状态:您可以使用以下命令来验证服务的状态:
sudo systemctl status your_service_name.service
这将显示服务的当前状态和任何错误消息。
如果您按照上述步骤进行操作仍然无法实现开机自启动,请检查脚本文件的权限和路径是否正确,并确保脚本文件本身能够正常运行。
如果问题仍然存在,您可以查看系统日志以获取更多关于服务启动失败的详细信息。使用命令 journalctl -u your_service_name.service 查看服务的日志。
请注意,以上步骤仅适用于使用 systemd 作为 init 系统的 Ubuntu 18.04 系统。如果您使用的是其他版本或不同的 init 系统,请参考相应的文档或支持资源进行操作。
错误的服务配置文件:请确保你的服务配置文件(通常位于/etc/systemd/system/目录下,以.service为扩展名)正确配置。检查以下几点:
ExecStart行是否指定了正确的脚本路径和参数。
WorkingDirectory行是否设置了正确的工作目录。
User和Group行是否设置为具有适当权限的用户和组。
其他配置项是否正确设置。
脚本文件权限问题:请确保你的.sh脚本文件具有可执行权限。可以使用chmod命令为脚本文件添加执行权限,例如:chmod +x script.sh。
脚本文件路径问题:确认你在服务配置文件中指定的脚本路径是正确的,并且脚本文件确实存在于该路径下。
依赖问题:如果你的脚本依赖于其他服务或资源,确保这些依赖项在系统启动时可用。你可以使用Requires和After等选项来定义依赖关系。
错误日志查看:检查系统日志以获取更多信息。使用journalctl命令可以查看systemd服务的日志。例如:journalctl -u your_service_name。
重新加载和启动服务:如果你对服务配置文件进行了更改,请使用systemctl命令重新加载配置并启动服务。例如:sudo systemctl daemon-reload和sudo systemctl start your_service_name。
以下答案参考newbing,回答由博主波罗歌编写:
您好,根据您的描述,可能有几种原因导致服务启动失败并显示为"dead"状态的问题。
路径问题:请确保.sh脚本文件的路径正确,并且脚本文件有可执行权限。您可以通过ls -l
命令查看文件的权限,使用chmod +x
命令给文件添加可执行权限。
依赖问题:如果您的脚本文件依赖于其他程序或库文件,请确保这些依赖已经正确安装,并且能够在启动时被找到。
脚本问题:请确保脚本文件本身没有错误。您可以手动尝试运行脚本文件并检查输出结果。您还可以尝试修改脚本文件的权限为可读可写(chmod 755 script.sh
),然后使用./script.sh
命令运行脚本,确保它正常工作。
关于使用systemd服务开机自启动.sh脚本文件的步骤如下:
myservice.service
,并将以下内容复制到该文件中:[Unit]
Description=My Service
After=network.target
[Service]
ExecStart=/path/to/your/script.sh
Restart=always
[Install]
WantedBy=multi-user.target
将该文件拷贝到/etc/systemd/system/
目录下。
运行以下命令设置服务开机自启动并启动服务:
sudo systemctl enable myservice
sudo systemctl start myservice
sudo systemctl status myservice
命令查看服务状态。请确保将上述代码中的/path/to/your/script.sh
替换为您的脚本文件的实际路径。
希望以上方法可以帮助您解决问题。如果还有其他问题,请随时提问。
如果我的回答解决了您的问题,请采纳!