如何编写开机自启任务脚本

wen 实用脚本 2

本文目录导读:

如何编写开机自启任务脚本

  1. 🔷 Windows系统
  2. 🔷 Linux系统
  3. 🔷 示例脚本模板
  4. 🔷 注意事项

我来介绍几种常见的开机自启脚本编写方法,覆盖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

🔷 注意事项

  1. 权限管理:确保脚本有正确执行权限
  2. 日志记录:添加日志以便调试
  3. 延迟执行:某些服务可能需要等待系统完全启动
  4. 错误处理:添加try-catch或exit code处理
  5. 测试验证:重启系统测试是否正常运行

选择哪种方法取决于你的具体需求和操作系统版本,对于现代系统,推荐使用任务计划程序(Win)或Systemd(Linux)。

上一篇怎么用脚本获取文件属性摘要

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!