bg: Linux server存在关机重启,问题,那么后台运行的命令就需要重启后手动运行。
nohup /path/find_data_loop_in2m.sh > /dev/null 2>&1 &
那么如何让它开机就启动呢?
#创建一个开机自启的服务
touch find_data_change_log_loop.service
vim find_data_change_log_loop.service
i #编辑
#把下面代码贴到文件中
[Unit]
Description=Find Data Change Log Loop Service
After=network.target[Service]
Type=simple
User=root
# 启动命令,直接去执行你的 nohup 脚本
semanage fcontext -a -t bin_t "/usr/local/docker/autosrc/script/find_data_change_log_loop_in2m.sh"
restorecon -v /usr/local/docker/autosrc/script/find_data_change_log_loop_in2m.sh
# 进程挂了自动重启
Restart=always
RestartSec=3
# 日志输出路径(你可以改成你喜欢的)
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.targetesc #退出insert
:wq! #保存
cat /etc/systemd/system/find_data_change_log_loop.service #查看内容是否保存成功
创建ok后执行如下脚本,看下 SELinux 状态:
getenforce
如果是 Enforcing
,很多时候 systemd 服务跑用户脚本会被拦。可以试着先关掉测试:
setenforce 0
只需要第一次执行
semanage fcontext -a -t bin_t "/path/find_data_change_log_loop_in2m.sh"
restorecon -v /path/find_data_change_log_loop_in2m.sh
如果以后脚本路径或者权限变动了,可以再跑一遍。
然后重启电脑服务
setenforce 1 #恢复
systemctl daemon-reload
systemctl restart find_data_change_log_loop #替换为创建的service文件名
systemctl status find_data_change_log_loop
最后结果可以看到service在running, 表示成功!
● find_data_change_log_loop.service - Find Data Change Log Loop Service
Loaded: loaded (/etc/systemd/system/find_data_change_log_loop.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2025-04-23 01:15:03 CST; 4s ago
Main PID: 14133 (find_data_chang)
Tasks: 2 (limit: 26213)
Memory: 1.1M
CGroup: /system.slice/find_data_change_log_loop.service
├─14133 /bin/bash /usr/local/docker/autosrc/script/find_data_change_log_loop_in2m.sh
└─14136 sleep 120
检查下运行的这些进场是不是都在跑
[root@localhost logs]# ps -aux | grep find_data_change_log_loop
root 11167 0.0 0.0 201796 11964 pts/1 T 00:33 0:00 sudo systemctl status find_data_change_log_loop
root 11169 0.0 0.0 86128 7836 pts/1 T 00:33 0:00 systemctl status find_data_change_log_loop
root 11929 0.0 0.0 94204 6972 pts/1 T 00:50 0:00 journalctl -u find_data_change_log_loop -f
root 14133 0.0 0.0 12720 3072 ? Ss 01:15 0:00 /bin/bash /usr/local/docker/autosrc/script/find_data_change_log_loop_in2m.sh
root 14150 0.0 0.0 12264 2364 pts/1 S+ 01:15 0:00 grep --color=auto find_data_change_log_loop
journalctl -u find_data_change_log_loop -f #要是以后想查这个 service 的日志:
all good to complete this service.