我遵循了stackoverflow上提供的关于在启动时启动python脚本的多个教程,但它们都不起作用。
我需要激活一个virtualenv然后启动一个flask服务器
我在/etc/init.d/
中做了一个start.sh
#!/bin/sh
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $portmap
# Should-Stop: $portmap
# X-Start-Before: nis
# X-Stop-After: nis
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
cd /home/ion/
source /home/ion/py35/bin/activate
cd /home/ion/Desktop/flask/
nohup python main.py &
echo "Done"
它的权限是chmod at+x
ion@aurora:/etc/init.d$ ll start.sh
-rwxr-xr-x 1 root root 625 Jun 25 19:10 start.sh*
转到/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/etc/init.d/start.sh
exit 0
不起作用
cronjob方法
sudo crontab-e
并附加
@reboot sh '/etc/init.d/start.sh'
也没起作用,我错在哪里?
手动触发日志
(py35) ion@aurora:~/Desktop/flask$ python main.py
WARNING:tensorflow:From /home/ion/Desktop/flask/encoder.py:57: calling l2_normalize (from tensorflow.python.ops.nn_impl) with dim is deprecated and will be removed in a future version.
Instructions for updating:
dim is deprecated, use axis instead
2018-06-25 19:34:05.511943: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://localhost:5505/ (Press CTRL+C to quit)
* Restarting with stat
1)不要使用旧的“init.d”方法。用现代的东西。如果你有Ubuntu15.04或更高版本,你可以使用Systemd创建守护进程,它将在启动时自动启动。例如,如果你的Ubuntu版本早于15.04,那么使用Upstart。
对于Systemd:
在
/lib/systemd/system/you_service_name.service
中创建包含以下内容的单元文件(据我所见,python脚本在运行时不会生成新进程,因此Type
应该是simple
。更多信息here):保存此文件并重新加载systemd:
然后将您的服务添加到autostart:
您应该看到Systemd在
enable
操作之后创建了所需的符号链接。重新启动并查看它是否已启动并正在运行(
ps aux | grep python
或sudo systemctl status you_service_name.service
)。如果有什么奇怪的事情-检查系统日志:升级版:
要在所需的virtualenv中启动python脚本,只需在服务单元文件中使用以下表达式:
2)您也可以使用
crontab
,但需要在那里为所需的shell指定完整路径,例如:如果你需要更多的帮助,请告诉我。
相关问题 更多 >
编程相关推荐