Linux开机自启动screen执行任务
使用Screen与系统服务实现程序后台运行及开机自启
方法一:通过Screen实现后台运行(适合临时或简单场景)
1. 安装Screen工具
根据系统类型选择对应命令:
CentOS系统:
yum -y install epel-release
yum -y install screen
Debian/Ubuntu系统:
apt install screen
2. 创建启动脚本(以彩虹聚合DNS为例)
创建脚本文件:
vi dns.sh
按
i
进入编辑模式,添加以下内容:sleep 20 # 延迟20秒启动(等待数据库就绪,无需可设为0) screen_name="dns" # 定义screen会话名称 screen -dmS $screen_name # 后台创建screen会话 # 要执行的命令(需指定完整路径) cmd="/vhs/kangle/ext/php74/bin/php -c /vhs/kangle/ext/php74/phpdns.ini /home/ftp/d/dns/wwwroot/think dmtask" # 向screen会话发送命令并执行 screen -X -S $screen_name -p 0 -X stuff "$cmd" screen -X -S $screen_name -p 0 -X stuff '\n' # 模拟回车执行 screen -X -S $screen_name -p 0 -X stuff "exit" # 执行完成后退出
- 按
Esc
,输入:wq!
保存退出。 赋予脚本执行权限:
chmod +x dns.sh
3. 设置开机自启动(使用cron @reboot)
编辑当前用户的crontab配置:
crontab -e
在文件末尾添加以下内容(替换为实际脚本路径):
@reboot sh /path/to/dns.sh
保存退出:
- 若用
vi
编辑器:按Esc
,输入:wq
回车 - 若用
nano
编辑器:按Ctrl+O
保存,Ctrl+X
退出
- 若用
验证配置是否生效:
crontab -l
方法二:通过系统服务实现(推荐,依赖管理更完善)
该方法由"村长"提供,可在数据库启动后自动运行程序,适合长期稳定运行。
1. 创建服务配置脚本
创建脚本文件:
vi czdns.sh
按
i
进入编辑模式,添加以下内容:#!/bin/bash clear; echo '================================================================'; echo ' 此程序仅供学习,执行请用虚拟机,一切后果与本人无关'; echo ' 禁止使用本脚本创建违规违法网站,发现将举报'; # 创建系统服务配置文件 cat >>/lib/systemd/system/dns.service<<EOF [Unit] Description=dns server Service After=syslog.target network.target mysql.service # 确保在数据库启动后运行 [Service] Type=forking # 执行PHP命令(根据实际路径修改) ExecStart=/bin/bash -c "/vhs/kangle/ext/php74/bin/php -c /vhs/kangle/ext/php74/phpdns.ini /home/ftp/d/dns/wwwroot/think dmtask &" [Install] WantedBy=multi-user.target EOF # 创建服务链接并启用 ln -s /lib/systemd/system/dns.service /etc/systemd/system/multi-user.target.wants/dns systemctl daemon-reload systemctl enable dns
- 按
Esc
,输入:wq!
保存退出。
2. 执行脚本并生效
赋予脚本执行权限:
chmod +x czdns.sh
运行脚本创建服务:
./czdns.sh
3. 服务管理命令(可选)
- 启动服务:
systemctl start dns
- 停止服务:
systemctl stop dns
- 查看状态:
systemctl status dns
- 重启服务:
systemctl restart dns
两种方法对比及注意事项
方法 | 优势 | 适用场景 |
---|---|---|
Screen + cron | 配置简单,适合临时调试 | 短期运行、需要随时进入会话查看输出 |
系统服务 | 依赖管理完善,启动顺序可控 | 长期运行、生产环境、需要随系统服务顺序启动 |
注意事项
- 路径需根据实际环境修改,确保PHP解释器和程序文件路径正确
- 延迟时间(
sleep 20
)需根据数据库启动速度调整 - cron方式中,建议使用绝对路径指定脚本位置,避免因环境变量问题导致执行失败
- 系统服务方式中,
After=mysql.service
确保程序在数据库之后启动,若使用其他数据库(如mariadb)需对应修改 可通过查看日志排查问题:
- cron日志:
grep CRON /var/log/syslog
(Debian/Ubuntu)或/var/log/cron
(CentOS) - 系统服务日志:
journalctl -u dns
- cron日志:
评论区(暂无评论)