本文目录导读:

配置Python脚本开机自启动有多种方法,下面我详细介绍几种主流方式:
Windows系统
启动文件夹法(最简单)
将脚本的快捷方式添加到启动文件夹:
# 启动文件夹路径(Win+R运行) shell:startup # 或 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
手动操作步骤:
- 创建Python脚本的快捷方式
- 按
Win+R,输入shell:startup - 将快捷方式粘贴到打开的文件夹
脚本方式(创建一个批处理文件):
@echo off pythonw D:\path\to\your_script.py
注册表法(更隐蔽)
# 创建注册表项(管理员权限运行) reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "MyPythonScript" /t REG_SZ /d "pythonw D:\path\to\your_script.py"
任务计划程序(推荐)
import subprocess
# 使用schtasks命令创建任务
subprocess.run([
'schtasks', '/create', '/tn', 'MyPythonScript',
'/tr', 'pythonw D:\\path\\to\\script.py',
'/sc', 'onlogon',
'/ru', 'SYSTEM',
'/rl', 'highest'
], shell=True)
Linux/Mac系统
systemd服务(Linux推荐)
创建服务文件 /etc/systemd/system/myscript.service:
[Unit] Description=My Python Script After=network.target [Service] Type=simple User=your_user WorkingDirectory=/path/to/script ExecStart=/usr/bin/python3 /path/to/your_script.py Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload sudo systemctl enable myscript.service sudo systemctl start myscript.service
crontab(Linux/Mac)
# 编辑crontab crontab -e # 添加以下行(@reboot表示开机时运行) @reboot /usr/bin/python3 /path/to/your_script.py >> /path/to/log.txt 2>&1 # 也可以使用延迟启动 @reboot sleep 30 && /usr/bin/python3 /path/to/your_script.py
桌面自动启动(Linux桌面环境)
# 创建.desktop文件 mkdir -p ~/.config/autostart cat > ~/.config/autostart/myscript.desktop << EOF [Desktop Entry] Type=Application Name=My Python Script Exec=python3 /path/to/your_script.py Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true EOF
跨平台方案
使用Python脚本自身配置
import platform
import os
import sys
def setup_autostart():
"""自动配置开机自启动"""
system = platform.system()
if system == "Windows":
# Windows配置
startup_folder = os.path.join(
os.environ['APPDATA'],
'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup'
)
# 创建VBS脚本(避免控制台窗口)
vbs_content = f'''
CreateObject("Wscript.Shell").Run "pythonw ""{sys.argv[0]}""", 0, False
'''
vbs_path = os.path.join(startup_folder, "my_script.vbs")
with open(vbs_path, "w") as f:
f.write(vbs_content)
elif system == "Linux":
# Linux配置 - 使用systemd
service_content = f'''
[Unit]
Description=My Python Script
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 {sys.argv[0]}
Restart=on-failure
[Install]
WantedBy=multi-user.target
'''
# 写入服务文件(需要sudo)
with open("/etc/systemd/system/myscript.service", "w") as f:
f.write(service_content)
os.system("sudo systemctl enable myscript.service")
elif system == "Darwin": # macOS
# 使用launchd
plist_content = f'''
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.myscript</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python3</string>
<string>{sys.argv[0]}</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
'''
plist_path = os.path.expanduser("~/Library/LaunchAgents/com.user.myscript.plist")
with open(plist_path, "w") as f:
f.write(plist_content)
# 调用配置
setup_autostart()
注意事项
使用绝对路径
始终使用绝对路径,避免环境变量问题:
import os script_path = os.path.abspath(__file__) python_path = sys.executable # 当前Python解释器路径
日志记录
import sys
import logging
# 将输出重定向到日志文件
sys.stdout = open('/path/to/log.txt', 'a')
sys.stderr = sys.stdout
# 或者使用logging模块
logging.basicConfig(
filename='/path/to/script.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
错误处理
try:
# 你的脚本代码
pass
except Exception as e:
# 记录错误但不退出
logging.error(f"Error: {e}")
权限问题
- Windows: 如果脚本需要管理员权限,在快捷方式属性中设置"以管理员身份运行"
- Linux: 使用
chmod +x script.py添加执行权限 - macOS: 可能需要授权辅助功能权限
最佳实践建议
- 延迟启动:在配置中加入延迟,等待系统完全启动
- 健康检查:定期检查脚本是否正常运行
- 看门狗:使用supervisor或systemd的自动重启功能
- 测试验证:重启系统测试配置是否生效
选择哪种方法取决于你的:
- 操作系统
- 权限要求
- 是否需要后台运行
- 是否需要自动重启
建议先从简单的启动文件夹或crontab开始,需要更多功能时再迁移到systemd等服务管理器。