本文目录导读:

我来介绍几种常见的开机自启脚本编写方法,覆盖Windows和Linux系统。
🔷 Windows系统
任务计划程序(推荐)
# 创建开机自启任务(以管理员身份运行PowerShell)
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\startup.ps1"
$trigger = New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -TaskName "MyStartupScript" `
-Action $action `
-Trigger $trigger `
-Principal $principal `
-Settings $settings
启动文件夹方式
:: 将脚本放入启动文件夹 :: 当前用户启动文件夹 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\ :: 所有用户启动文件夹 %ProgramData%\Microsoft\Windows\Start Menu\Programs\StartUp\ :: 示例:创建快捷方式到启动文件夹 @echo off echo [InternetShortcut] > "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\myscript.url echo URL=file:///C:/Scripts/startup.bat >> "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\myscript.url echo IconIndex=0 >> "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\myscript.url echo IconFile=C:\Scripts\startup.bat >> "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\myscript.url
注册表方式
@echo off :: 当前用户 reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "MyScript" /t REG_SZ /d "C:\Scripts\startup.bat" /f :: 所有用户(需要管理员权限) reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v "MyScript" /t REG_SZ /d "C:\Scripts\startup.bat" /f
服务方式(高级)
:: 使用NSSM工具创建服务 nssm install MyStartupService "C:\Scripts\startup.bat" nssm set MyStartupService Start SERVICE_AUTO_START
🔷 Linux系统
Systemd服务(推荐)
# 创建服务文件 sudo cat > /etc/systemd/system/startup-script.service << 'EOF' [Unit] Description=My Startup Script After=network.target [Service] Type=simple ExecStart=/usr/local/bin/startup.sh Restart=on-failure User=root [Install] WantedBy=multi-user.target EOF # 启用服务 sudo systemctl daemon-reload sudo systemctl enable startup-script.service sudo systemctl start startup-script.service
rc.local方式
# 编辑/etc/rc.local sudo cat > /etc/rc.local << 'EOF' #!/bin/bash # 开机自启脚本 # 启动自定义服务 /usr/local/bin/startup.sh & # 启动Python应用 cd /opt/myapp && python3 app.py & exit 0 EOF # 添加执行权限 sudo chmod +x /etc/rc.local sudo systemctl enable rc-local
Crontab方式
# 编辑crontab crontab -e # 添加以下行(@reboot表示开机执行) @reboot /usr/local/bin/startup.sh # 带延迟执行 @reboot sleep 30 && /usr/local/bin/startup.sh
init.d脚本(旧系统)
# 创建init脚本
sudo cat > /etc/init.d/startup-script << 'EOF'
#!/bin/bash
### BEGIN INIT INFO
# Provides: startup-script
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start my script
# Description: Enable service for startup
### END INIT INFO
case "$1" in
start)
echo "Starting startup script..."
/usr/local/bin/startup.sh &
;;
stop)
echo "Stopping startup script..."
pkill -f startup.sh
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
EOF
# 设置权限并启用
sudo chmod +x /etc/init.d/startup-script
sudo update-rc.d startup-script defaults
🔷 示例脚本模板
Windows PowerShell脚本
# startup.ps1
$logFile = "C:\Logs\startup.log"
# 记录启动时间
Add-Content -Path $logFile -Value "[$(Get-Date)] Script started"
# 启动应用
try {
# 启动Python应用
Start-Process -FilePath "python" -ArgumentList "C:\myapp\app.py"
# 启动Node.js应用
Start-Process -FilePath "node" -ArgumentList "C:\myapp\server.js"
# 启动批处理文件
Start-Process -FilePath "C:\scripts\service.bat"
Add-Content -Path $logFile -Value "[$(Get-Date)] Applications started successfully"
} catch {
Add-Content -Path $logFile -Value "[$(Get-Date)] Error: $_"
}
Linux Shell脚本
#!/bin/bash
# startup.sh - 开机自启脚本
LOG_FILE="/var/log/startup.log"
# 记录启动信息
echo "[$(date)] Starting startup script" >> $LOG_FILE
# 等待网络就绪
sleep 10
# 启动应用
function start_service() {
local name=$1
local command=$2
if $command; then
echo "[$(date)] $name started successfully" >> $LOG_FILE
else
echo "[$(date)] Failed to start $name" >> $LOG_FILE
fi
}
# 启动服务
start_service "Web Server" "/usr/local/bin/webapp.sh"
start_service "Database" "systemctl start postgresql"
# 检查进程状态
echo "[$(date)] Services status:" >> $LOG_FILE
ps aux | grep -E "webapp|postgres" >> $LOG_FILE
🔷 注意事项
- 权限管理:确保脚本有正确执行权限
- 日志记录:添加日志以便调试
- 延迟执行:某些服务可能需要等待系统完全启动
- 错误处理:添加try-catch或exit code处理
- 测试验证:重启系统测试是否正常运行
选择哪种方法取决于你的具体需求和操作系统版本,对于现代系统,推荐使用任务计划程序(Win)或Systemd(Linux)。