web-dev-qa-db-ja.com

Ubuntu Server 17.10で起動時にスクリプトを実行するにはどうすればよいですか?

Ubuntu Server 17.10マシンで起動時にスクリプトを実行するにはどうすればよいですか? 17.10で方法が変わったと思います。

13
Rodolfho

スクリプトを適切なユーザーのcronテーブル(つまり、crontab)に@rebootのスケジュールで配置します。

ユーザーは、cronテーブルをcrontab -eで編集できます。

起動時に/path/to/script.shを実行する例:

@reboot /path/to/script.sh

ルートとして実行する必要がある場合は、@reboot Sudo /path/to/script.shを使用しないでください。
ルートのcrontabを編集するには、Sudo crontab -eu rootを使用します。

次も参照: crontab(1)、cron(8)、crontab(8)

14
DopeGhoti

Ubuntu 15.04以降では、デフォルトでsystemdと呼ばれるものを使用します。これは、起動サービスと手順を自動化する(一種の)プログラムです。独自のサービスを作成して、ほんの少しの労力でスタートアップサービスのリストに追加できます。

Basic Systemd Service

これは必要最低限​​の.serviceファイルであり、これを使用してmy python guiサーバーを起動できます(シェルスクリプトである必要があり、問題ではありません)。

[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または任意のエディターを使用して、起動時に実行するスクリプトを記述します。ファイルの最上部に適切なシバン(bashスクリプトの場合は#!/bin/bash)を含め、chmodを使用して実行権限を付与してください。

  2. My_service.serviceという名前のファイルにサービスを記述し、cp my_service.service /lib/systemd/system/を使用して適切なディレクトリにコピーするだけです。

  3. サービスを開始してください:Sudo systemctl start my_service.service。これにより、サービスに実行するように指示したスクリプトが起動します。同じコマンドで、startの代わりに「stop」を使用すると、オフになります。

  4. スタートアッププロセスにサービスを追加します:Sudo systemctl enable my_service.service。削除するには、同じコマンドで「有効」を「無効」に置き換えます。

以上です!スクリプトは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スクリプトを使用していますが、式はシェルスクリプトとまったく同じです。

さらに読むには この優れたチュートリアル DigitalOcean、および このAskUbuntuスレッド にあり、systemdの学習に役立つ優れた答えが見つかります。お役に立てれば!

2
Tyrel Kostyk