[Seek Help] 我想实现一个比较特殊的http_server.py文件的开机自启动(已解决)
Tofloor
poster avatar
176******80
deepin
2022-01-27 00:16
Author

背景:

1、我有一个http_server.py文件(可以实现上传、下载、删除),放在一个文件夹里(我想作为http共享的文件夹)。

2、手动打开这个文件夹,然后终端:python3 HTTP_SERVER.py 或者 nohup python3 HTTP_SERVER.py >> HTTP_SERVER.log 2>&1 &

可以实现共享。但我想把它做成开机自启动。

2、我之前已经成功尝试了smb和vsftpd,所以这次只是单纯想试试http,这有个好处就是客户端(我的手机)只要有浏览器就行。

前期尝试:

1、我试过在上面的命令里加入目录,像这样:python3 /home/jss/Downloads/ftpfiles/HTTP_SERVER.py,会报错No such file or directory.不能访问。

2、我试过写rc.local,不报错,但不成功。

3、试过写.desktop文件扔在autostart文件夹,也是不成功。

问题:

作为没入门的新手,不会写.sh文件,想求助大神帮助实现上述功能。

目的思路就是:开机,会自动执行一个文件,指向打开目标文件夹,在目标文件夹打开终端,执行指定命令python3 HTTP_SERVER.py 或者 nohup python3 HTTP_SERVER.py >> HTTP_SERVER.log 2>&1 &

最好都是后台完成。

#不知道上面说的对不对。虚心求教。

Reply Favorite View the author
All Replies
liwl
deepin
2022-01-27 00:20
#1

参照坚果云的启动,创建一个xxx.desktop放到~/.config/autostart下面,desktop的内容按照实际修改

主要修改Exec内容,其他内容对应修改即可

image.png

Reply View the author
神末shenmo
deepin
Spark-App
Q&A Team
2022-01-27 00:59
#2

我有个py2的,你这个py3可以介绍下吗

Reply View the author
orzorc
deepin
2022-01-27 01:24
#3

手动执行能成功,开机启动不成功的原因我能想到的有2个:

  1. working dir的问题,比如程序中需要使用到当前目录,而自动启动的时候虽然你使用的是绝对路径,但是working dir还是你当前命令执行的位置。排除这个情况的方法:手动在其他目录用绝对路径运行,看是否正常
  2. 依赖服务没有启动,启动顺序不一样导致你程序依赖的一些服务当时还没有启动起来,比如之前我装网盘的时候,它需要先连好网,本地mysql服务启动完成等,有些服务启动了,不代表它已经能用了,排除这个情况的方法:在启动命令前加一个sleep试试,具体sleep多少,要根据你电脑的启动速度来看了。如果是这个问题,你可能要查一下怎样用systemd wanted这种方式解决服务依赖问题或者保留sleep的方式
  3. 运行用户的问题,没记错的话rc.local的命令是由root执行的,有些程序可能要求非root用户运行。排除方式:手动用root执行一次

rc.local也是有日志的,查一查,到底是命令有问题没启动起来,还是启动了但是报错退出了。

Reply View the author
176******80
deepin
2022-01-27 01:45
#4
神末shenmo

我有个py2的,你这个py3可以介绍下吗

https://github.com/JevenM/HTTP_SERVER

我从这个大佬这下载的

Reply View the author
176******80
deepin
2022-01-27 02:15
#5
orzorc

手动执行能成功,开机启动不成功的原因我能想到的有2个:

  1. working dir的问题,比如程序中需要使用到当前目录,而自动启动的时候虽然你使用的是绝对路径,但是working dir还是你当前命令执行的位置。排除这个情况的方法:手动在其他目录用绝对路径运行,看是否正常
  2. 依赖服务没有启动,启动顺序不一样导致你程序依赖的一些服务当时还没有启动起来,比如之前我装网盘的时候,它需要先连好网,本地mysql服务启动完成等,有些服务启动了,不代表它已经能用了,排除这个情况的方法:在启动命令前加一个sleep试试,具体sleep多少,要根据你电脑的启动速度来看了。如果是这个问题,你可能要查一下怎样用systemd wanted这种方式解决服务依赖问题或者保留sleep的方式
  3. 运行用户的问题,没记错的话rc.local的命令是由root执行的,有些程序可能要求非root用户运行。排除方式:手动用root执行一次

rc.local也是有日志的,查一查,到底是命令有问题没启动起来,还是启动了但是报错退出了。

1、我试过,像你说的一样,虽然我设了路径,但不会按我的路径执行,因为它执行后生成的文件并不在原来的路径里。但是我不知道怎么办。

2、应该还不是依赖的事,还没到那一步,因为我不关机的情况下,试着执行还没有成功。

3、rc.local的执行用户问题,我也试过了,也没成功,当然也很可能是我的用法不对。

Reply View the author
176******80
deepin
2022-01-27 02:26
#6

HTTP_SERVER-main.zip

这是我的HTTP_server文件,来自下面这位大佬,求位大佬帮我试试,我的系统是最新的20.4社区版,内核是5.10.83-amd64

https://github.com/JevenM/HTTP_SERVER

Reply View the author
176******80
deepin
2022-01-27 02:35
#7
liwl

参照坚果云的启动,创建一个xxx.desktop放到~/.config/autostart下面,desktop的内容按照实际修改

主要修改Exec内容,其他内容对应修改即可

image.png

我试了,没反应,我还是没法解决python3 后面加绝对路径没办执行成功的问题

Reply View the author
酷谷的谷子
deepin
2022-01-27 03:55
#8

用启动器文件启动,在运行脚本就报错,没有办法在.config里面运行

2022-01-26 19-49-35 创建的截图.png

延迟启动也不行,还是问一下作者,

可以有代替的,用phpstudy 在使用这个webftp.zip也一样就是麻烦里点

Reply View the author
176******80
deepin
2022-01-27 05:16
#9
酷谷的谷子

用启动器文件启动,在运行脚本就报错,没有办法在.config里面运行

2022-01-26 19-49-35 创建的截图.png

延迟启动也不行,还是问一下作者,

可以有代替的,用phpstudy 在使用这个webftp.zip也一样就是麻烦里点

我学着写了个简单的a.sh文件:

#!/bin/sh
sleep 30
cd /home/jss/Downloads/ftpfiles/
python3 HTTP_SERVER.py

然后在终端cd入a.sh文件目录执行bash a.sh 好使。直接绝对目录执行也好使。

然后,给它执行权限 chmod +x a.sh,试着 ./a.sh,也能执行.#目前还不知道这步有啥用#

把这个.sh文件扔到 /etc/profile.d/ 里面,重启后,输入密码后,会卡三色球的鼠标图片转个不停。

然后就没有然后了,我想办法删除这个.sh文件,就正常了。

剩下的就是怎么让这个.sh文件(或者再改一下),正确自启动就行了。

Reply View the author
sudo_free
deepin
2022-01-27 05:19
#10

看了眼,你这不就一个单文件吗😂 你先把第一行改成 #!/usr/bin/env python3 , 然后 chmod +x 它,再试试绝对路径直接运行;

至于开机启动,建议写个 systemd service 就行了;因为记起来太麻烦了,每次我都是百度,建议你也百度;启动顺序放在network.target 后面就行

又看了下,你这去学点python好不好,都提示你 "Address already in use" 了,先把之前跑的停下来,killall python3

Reply View the author
orzorc
deepin
2022-01-27 05:51
#11
176******80

1、我试过,像你说的一样,虽然我设了路径,但不会按我的路径执行,因为它执行后生成的文件并不在原来的路径里。但是我不知道怎么办。

2、应该还不是依赖的事,还没到那一步,因为我不关机的情况下,试着执行还没有成功。

3、rc.local的执行用户问题,我也试过了,也没成功,当然也很可能是我的用法不对。

那试试把进入目录和命令合并一下,类似

cd xxxx/yyy && python 你的命令

image.png

Reply View the author
176******80
deepin
2022-01-27 06:39
#12
sudo_free

看了眼,你这不就一个单文件吗😂 你先把第一行改成 #!/usr/bin/env python3 , 然后 chmod +x 它,再试试绝对路径直接运行;

至于开机启动,建议写个 systemd service 就行了;因为记起来太麻烦了,每次我都是百度,建议你也百度;启动顺序放在network.target 后面就行

又看了下,你这去学点python好不好,都提示你 "Address already in use" 了,先把之前跑的停下来,killall python3

我还是个门外老汉😂

Reply View the author
176******80
deepin
2022-01-27 07:46
#13

总结:(先感谢上面的各位大佬)

1、我学着写了个简单的a.sh文件:(文件就在桌面上创建的)

#!/bin/sh
sleep 30
cd /home/jss/Downloads/ftpfiles/
python3 HTTP_SERVER.py

2、然后,给它执行权限 chmod +x a.sh #不确定这步有没有用 ,哈哈

3、然后用了这位大佬的方法,自动生成了一个rc.local文件 https://bbs.deepin.org/post/186337

4、然后把文件完整路径,像这样 /home/jss/Desktop/a.sh ,复制到rc.local里 exit 0 前面。

5、保存,退出,重启后,等30秒(我上面那个是睡30s)哈哈,就ok啦!!

Reply View the author
a***1@163.com
deepin
2022-04-17 20:30
#14
176******80

总结:(先感谢上面的各位大佬)

1、我学着写了个简单的a.sh文件:(文件就在桌面上创建的)

#!/bin/sh
sleep 30
cd /home/jss/Downloads/ftpfiles/
python3 HTTP_SERVER.py

2、然后,给它执行权限 chmod +x a.sh #不确定这步有没有用 ,哈哈

3、然后用了这位大佬的方法,自动生成了一个rc.local文件 https://bbs.deepin.org/post/186337

4、然后把文件完整路径,像这样 /home/jss/Desktop/a.sh ,复制到rc.local里 exit 0 前面。

5、保存,退出,重启后,等30秒(我上面那个是睡30s)哈哈,就ok啦!!

加启动延迟30秒执行是关键。。

Reply View the author