【Linux】使用systemd控制自定义脚本及配置开机自启、日志重定向

在Linux系统中,通过systemd可以方便地控制自定义的shell脚本,包括启动、停止、后台运行和设置开机自启。文章介绍了如何创建和配置shell脚本以及systemd服务文件,还将脚本的日志重定向到指定文件。在Ubuntu系统中,日志配置略有不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

在 Linux 系统下,使用systemd 可以方便地控制 自定义shell脚本启动和停止、配置后台运行、开启自启和日志重定向。

要使用 systemd ,需要先安装 systemd

安装systemd

如Linux服务端上没有安装 systemd,可以使用 yumapt 等命令安装 systemd

# yum
yum install systemd
# apt
apt install systemd

编辑自定义shell脚本hello.sh

vim /root/hello.sh
输入以下内容保存

#!/bin/sh
while true
do
    date +'%Y-%m-%d %H:%M:%S'
    sleep 5
done

该脚本只是隔5s输出一次当前时间(格式2023-07-10 15:43:35)
修改脚本执行权限
chmod +x /root/hello.sh

编辑hello.service文件

$ vim /lib/systemd/system/frps.service
写入内容

[Unit]
Description=Hello Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/root/hello.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=hello

[Install]
WantedBy=multi-user.target

/etc/rsyslog.d/新增hello.conf

vim /etc/rsyslog.d/hello.conf输入以下内容

if $programname == 'hello' then /root/hello.log
& stop

结合hello.service中的StandardOutput、StandardError、SyslogIdentifier配置项,hello.sh的输出将重定向到文件/root/hello.log

重启rsyslog

重定向日志配置要重启rsyslog之后才会生效,否则日志会输出到
/var/log/syslog/var/log/messages
systemctl restart rsyslog

注意

以上配置是在centos系统中实践有效。
在Ubuntu系统下,则替换如下修改:

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=hello
# 改成下面
StandardOutput=file:/root/hello.log
StandardError=file:/root/hello.log

使用systemd命令管理hello

# 启动hello
systemctl start hello
# 停止hello
systemctl stop hello
# 重启hello
systemctl restart hello
# 查看hello状态
systemctl status hello

配置hello开机自启

systemctl enable hello

<think>好的,用户想了解如何在Termux启动时自动执行t.sh脚本。首先,我需要回忆Termux的环境和启动机制。Termux是一个Android终端模拟器和Linux环境应用,它没有传统的Linux系统的init系统,比如systemd或rc.local。不过,用户可能可以通过shell配置文件来实现自动执行脚本。 接下来,用户可能的需求是每次启动Termux时自动运行某个脚本,比如t.sh。这时候需要确定Termux启动时会加载哪些配置文件。常见的shell是bash,所以应该检查.bashrc或者.bash_profile。不过Termux默认的shell可能是bash,也可能用户改用zsh或其他shell,需要考虑到不同shell的配置文件。 然后,可能需要指导用户如何编辑这些配置文件,比如使用nano或vim添加执行t.sh的命令。需要注意的是,用户可能对Linux命令不太熟悉,所以步骤要详细,包括如何打开文件、添加命令、保存退出等。 另外,需要提醒用户关于权限的问题,确保t.sh有可执行权限,否则脚本无法运行。比如使用chmod +x t.sh。 还有一种情况是,用户可能希望每次启动Termux会话时都运行脚本,而不仅仅是登录时。这时候可能需要检查不同的配置文件,比如.bashrc会在每次启动新的shell时执行,而.bash_profile只在登录时执行。需要明确告诉用户两者的区别,根据需求选择合适的文件。 另外,用户可能希望脚本在后台运行,或者有特定的工作目录,这时候需要建议他们使用nohup或者cd命令来调整。比如在脚本前加上cd /path/to/directory,或者使用nohup ./t.sh &来避免脚本阻塞终端。 还需要考虑错误处理,如果脚本有输出或者错误,可能需要重定向日志文件,方便用户排查问题。可以建议用户将命令修改为./t.sh > ~/t.log 2>&1,这样输出和错误都会记录到日志中。 最后,安全性也是一个问题,自动执行脚本可能会有风险,需要提醒用户确保脚本来源可靠,避免执行恶意代码。 可能用户遇到的问题包括:脚本没有执行权限,配置文件编辑错误,或者路径问题导致找不到脚本。需要提前在回答中涵盖这些常见问题,并提供解决步骤。 总结下来,回答需要分步骤指导用户如何设置自动启动,包括配置文件编辑、权限设置、路径处理,以及注意事项和常见问题解决。同时语言要简洁明了,适合不同水平的用户理解。</think>以下是关于 **在Termux中实现启动时自动执行`t.sh`脚本** 的完整指南: --- ### **一、实现原理** Termux启动时会自动加载特定shell配置文件,通过修改这些文件可实现自动化脚本执行。根据需求场景不同,提供三种主流方案: --- ### **二、基础方案(推荐)** #### **方案1:通过`.bashrc`实现(每次启动Shell时执行)** 1. 赋予脚本执行权限 ```bash chmod +x t.sh ``` 2. 编辑bash配置文件 ```bash nano ~/.bashrc ``` 3. 在文件末尾追加(按需选择模式): ```bash # 前台执行(会阻塞终端) ~/t.sh # 后台静默执行(不阻塞操作) nohup ~/t.sh >/dev/null 2>&1 & # 带日志输出 echo "[$(date)] 启动t.sh" >> ~/t.log ~/t.sh >> ~/t.log 2>&1 ``` 4. 保存退出:`Ctrl+O` → `Enter` → `Ctrl+X` --- #### **方案2:通过`startup`目录实现(仅Termux启动时执行)** 1. 创建自动启动目录 ```bash mkdir -p ~/.termux/boot ``` 2. 创建软链接或复制脚本 ```bash ln -s $PWD/t.sh ~/.termux/boot/00-run-t.sh # 或 cp t.sh ~/.termux/boot/ ``` 3. 需要开Termux的`唤醒锁定`权限(在Android设置中授予) --- ### **三、进阶配置** #### **1. 环境变量传递** 在脚本第一行声明解释器: ```bash #!/data/data/com.termux/files/usr/bin/bash export PATH=$PATH:/data/data/com.termux/files/usr/bin ``` #### **2. 延迟启动** 使用`sleep`控制执行时机: ```bash (sleep 10 && ~/t.sh) & ``` #### **3. 条件执行** 添加运行条件判断: ```bash if [ ! -f /tmp/t.lock ]; then touch /tmp/t.lock ~/t.sh rm /tmp/t.lock fi ``` --- ### **四、验证与调试** 1. 手动触发配置文件加载 ```bash source ~/.bashrc ``` 2. 查看进程是否运行 ```bash ps aux | grep t.sh ``` 3. 检查日志输出 ```bash tail -f ~/t.log ``` --- ### **五、常见问题解决** | 问题现象 | 解决方案 | |--------------------------|----------------------------------| | **权限被拒绝** | `chmod +x t.sh` | | **脚本路径错误** | 使用绝对路径:`/data/data/com.termux/files/home/t.sh` | | **Android系统杀进程** | 关闭电池优化 + 使用`termux-wake-lock` | | **中文乱码** | 在脚本开头添加:`export LANG=zh_CN.UTF-8` | --- ### **六、备选方案对比** | 方案 | 执行时机 | 优点 | 缺点 | |--------------------|---------------------|-----------------------|-----------------------| | `.bashrc` | 每次打开新终端 | 配置简单 | 频繁执行可能干扰操作 | | `.termux/boot` | Termux应用启动时 | 真正的开机启动 | 需处理Android权限问题 | | `cron`定时任务 | 自定义时间间隔 | 灵活调度 | 需要安装额外包 | --- ### **七、安全注意事项** 1. 避免在脚本使用`sudo`(Termux默认无root权限) 2. 敏感操作建议加密脚本: ```bash apt install openssl openssl aes-256-cbc -salt -in t.sh -out t.enc ``` 3. 定期检查脚本哈希值: ```bash sha256sum t.sh > checksum.sha256 ``` --- 通过上述配置,可实现从简单到复杂的自动化执行需求。建议普通用户优先选择**方案1**,若需要实现类似守护进程的效果,可配合`tmux`或`termux-services`使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值