如何在 Ubuntu Server 17.10 上启动时运行脚本?

如何在 Ubuntu Server 17.10 上启动时运行脚本?

如何在 Ubuntu Server 17.10 计算机上启动时运行脚本?我认为该方法在17.10中有所改变。

答案1

将脚本放入适当的用户cron表中(即定时任务) 的时间表为@reboot.

用户可以使用 编辑其croncrontab -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

基本程序

  1. 使用 或您选择的任何编辑器编写您希望在启动时运行的脚本nano。确保在文件的最顶部包含正确的 shebang(#!/bin/bash对于 bash 脚本),并使用 授予其可执行权限chmod

  2. 只需将您的服务写入名为 my_service.service 的文件中,然后将其复制到正确的目录中cp my_service.service /lib/systemd/system/

  3. 启动您的服务:sudo systemctl start my_service.service.这将启动您告诉服务运行的任何脚本。使用“停止”而不是启动的相同命令将其关闭。

  4. 将您的服务添加到启动过程中: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。希望这可以帮助!

相关内容