在最新版本的 systemd 中,已经不再推荐使用 rc-local
来运行自定义脚本或命令。相反,建议使用 systemd 的单位(unit)和服务(service)机制来管理和运行自定义脚本或命令。
以下是在 systemd 中运行自定义脚本的一种常用方法:
1. 先创建个人的脚本
mkdir -p ~/shell
echo 'date >> /tmp/0825xj_tmp.txt' > ~/shell/startup_script.sh
chmod +x ~/shell/startup_script.sh
2. 到 /etc/systemd/system/
目录下,创建一个 .service
文件,用于定义你的自定义脚本或命令的配置。创建一个类似于 startup_script.service
的文件,并将以下内容添加到文件中:
iniCopy Code[Unit]
Description=xiaojin Custom Script
[Service]
Type=forking
User=root
Group=root
ExecStart=/bin/sh /home/xj/shell/startup_script.sh
[Install]
WantedBy=default.target
将 /home/xj/shell/startup_script.sh
替换为实际的脚本路径。
3. 更新 systemd 配置并启用该服务:
sudo systemctl daemon-reload
sudo systemctl start startup_script.service
sudo systemctl status startup_script.service
sudo systemctl enable startup_script.service
这将重新加载 systemd 配置,并启用并启动你的自定义脚本服务。
4. 如果服务启动成功,你可以使用以下命令检查服务状态:
sudo systemctl status startup_script.service
5. 如果服务不能正常运行,可以使用命令查看服务运行日志,再根据日志信息去调整配置和服务。
sudo journalctl -f -u startup_script.service
从输出中,你可以查看服务是否正在运行以及是否存在任何错误或警告信息。
通过以上步骤,你可以使用 systemd 来管理和运行你的自定义脚本或命令。请确保将 /home/xj/tmp/test.sh
替换为实际的脚本路径,并确保具备足够的权限执行相关操作。
开机后10分钟再执行
要在 Ubuntu 启动后延迟一段时间再执行脚本,你可以使用 systemd 的 systemd.timer
单元。
下面是一个示例配置,展示如何在启动后等待 10 分钟后执行一个脚本。
首先,创建一个定时器单元文件 /etc/systemd/system/delayed_script.timer
,并将以下内容添加到文件中:
[Unit]
Description=Delayed Script Timer
[Timer]
OnBootSec=10min
Unit=delayed_script.service
[Install]
WantedBy=timers.target
然后,创建一个服务单元文件 /etc/systemd/system/delayed_script.service
,并将以下内容添加到文件中:
[Unit]
Description=Delayed Script
[Service]
Type=forking
User=root
Group=root
ExecStart=/bin/sh /home/xj/shell/delayed_script.sh
ExecStop=umount /s3/vm-mars-private-cn
[Install]
WantedBy=default.target
请确保将 /path/to/your/script.sh
替换为你要延迟执行的实际脚本路径。
完成后,使用以下命令激活定时器并启用它:
sudo systemctl daemon-reload
sudo systemctl enable delayed_script.timer
sudo systemctl start delayed_script.timer
sudo systemctl status delayed_script.timer
这样,在 Ubuntu 启动后的 10 分钟之后,指定的脚本将被执行。
crontab -e
将此命令添加到文件的末尾
@reboot sh /home/xj/data/shell/boot_up.sh
sudo umount /s3/vm-mars-saas-cn
mount-s3 --endpoint-url http://s3.cn-northwest-1.amazonaws.com.cn --region cn-northwest-1 vm-mars-saas-cn /s3/vm-mars-saas-cn/
>> /home/xj/tmp/0906_boot_output.log 2>&1