如何在 Ubuntu Server 17.10 计算机上启动时运行脚本?我认为该方法在17.10中有所改变。
答案1
将脚本放入适当的用户cron
表中(即定时任务) 的时间表为@reboot
.
用户可以使用 编辑其cron
表crontab -e
。
将在启动时运行的示例/path/to/script.sh
:
@reboot /path/to/script.sh
如果您需要以 root 身份运行它,请不要使用@reboot sudo /path/to/script.sh
;
用于sudo crontab -eu root
编辑 root 的 crontab。
也可以看看:定时任务(1), 定时任务(8), 定时任务(8)
答案2
Ubuntu 15.04 及更高版本默认使用名为 的程序systemd
,这是一个自动启动服务和过程的程序(某种)。您可以自己制作并将其添加到启动服务列表中,只需一点点努力。
基本系统服务
这是一个准系统.service
文件,可用于启动我的 python gui 服务器(可能是一个 shell 脚本,没关系):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
该Description
选项是描述服务是什么或做什么的任何字符串。
该ExecStart
选项指定要执行的命令。在这里,我给出了可执行 python 脚本的路径,并使用令牌&
在后台运行它。
该WantedBy
选项根据想要使用此服务的目标指定优先级。如果您不需要服务在任何特定时间运行,则只需将其设置为multi-user.target
。
基本程序
使用 或您选择的任何编辑器编写您希望在启动时运行的脚本
nano
。确保在文件的最顶部包含正确的 shebang(#!/bin/bash
对于 bash 脚本),并使用 授予其可执行权限chmod
。只需将您的服务写入名为 my_service.service 的文件中,然后将其复制到正确的目录中
cp my_service.service /lib/systemd/system/
。启动您的服务:
sudo systemctl start my_service.service
.这将启动您告诉服务运行的任何脚本。使用“停止”而不是启动的相同命令将其关闭。将您的服务添加到启动过程中:
sudo systemctl enable my_service.service
。要删除它,只需在同一命令中将“enable”替换为“disable”即可。
就是这样!请记住,您的脚本将自动以 root 权限运行,因为这是 systemd 服务中的默认设置。
我的简单例子(完整)
作为参考,这里有一个简单的 systemd 服务,它使用 Dash 启动一个简单的 Python GUI 服务器:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
此示例服务使用 Python3 脚本,但公式与 shell 脚本完全相同。
进一步阅读可在以下位置找到:这个优秀的教程由 DigitalOcean 提供,以及这个 AskUbuntu 线程一个很好的答案帮助我学习了 systemd。希望这可以帮助!