Ubuntu Server 17.10マシンで起動時にスクリプトを実行するにはどうすればよいですか? 17.10で方法が変わったと思います。
スクリプトを適切なユーザーの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)
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
に設定してください。
基本手順
nano
または任意のエディターを使用して、起動時に実行するスクリプトを記述します。ファイルの最上部に適切なシバン(bashスクリプトの場合は#!/bin/bash
)を含め、chmod
を使用して実行権限を付与してください。
My_service.serviceという名前のファイルにサービスを記述し、cp my_service.service /lib/systemd/system/
を使用して適切なディレクトリにコピーするだけです。
サービスを開始してください:Sudo systemctl start my_service.service
。これにより、サービスに実行するように指示したスクリプトが起動します。同じコマンドで、startの代わりに「stop」を使用すると、オフになります。
スタートアッププロセスにサービスを追加します: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の学習に役立つ優れた答えが見つかります。お役に立てれば!