Systemdでそれを行う方法(簡単です)
Ubuntuの亜種とMintがsystemdに移行した今、上記に基づいた古いソリューションでは満足度が低いことがわかりました。私はsystemdでそれを行う方法を見つけるためにウェブを検索し、他の人の知恵を組み合わせて、次のチュートリアルを含むblogspot.com.auのブログ投稿として文書化しました。
systemdでは、以下のテンプレートを使用してスクリプトを呼び出す1つまたは2つのファイルを作成し、いくつかのコマンドを実行します。シンプル。
GUIバージョン
最初に、起動時またはシャットダウン時に実行するスクリプトを作成します。両方を必要としない場合は、どちらかを実行してください。.scopening_atstartと.scfullcopy_atendを作成しました。
次に、ファイルを右クリックしてプロパティを選択し、アクセス許可の下で[ファイルをプログラムとして実行することを許可する]をオンにして、両方が実行可能であることを確認します。
作成した2つのファイルは、ramdiskの内容を生成して保存します。また、ホームディレクトリにファイルを作成して、サービスが機能していることを証明します。それらは次の形式でした:
#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time
次に、ファイルマネージャーをルートとして開き/etc/systemd/system
、ファイルstartup.serviceとファイルsave-ramdisk.serviceを開いて作成しました。独自の名前を選択でき、一般的な名前にはjohns_start.serviceという名前のスタートアップファイルとjohns_shutdown.serviceという名前のシャットダウンファイルを含めることができます。既存のサービス名を選択しないでください。
[Unit]
Description=Startup Applications
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart
[Install]
WantedBy=multi-user.target
そして
[Unit]
Description=Save Ramdisk to Wine drive C
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend
[Install]
WantedBy=multi-user.target
同じサービスファイルを使用して、実行可能スクリプトのフルパスを置き換えることができます。
最後に、それぞれに対してコマンドsystemctl enable your_files_nameを実行します(ただし、接尾辞サービスは使用しません)。だから私の最初のものはsystemctl enable startup
サービスを開始するには、コンピューターを1回再起動します。systemdがマルチユーザーターゲットに入るたびに開始サービスが実行され、マルチユーザーターゲットを出るときに停止サービスが実行されます。アクティベーション条件が異なる代替サービスファイルについては、以下で説明します。
その他の便利なコマンドは次のとおりです。
systemctl is-enabled startup
systemctl is-active startup
systemctl restart startup
詳細については、上記のリファレンスをご覧ください。
CLI(コマンドライン)バージョン
この説明は、/ home / johnではなくホームディレクトリから操作し、必要に応じてsudoを使用し、vimまたはsvimを作成するエディターを選択することを前提としています。
作成し、最初の行で起動およびシャットダウンシェルスクリプトを#!/bin/sh
して使用してそれらを実行しますchmod +x my_new_filename
。
上記の2つのファイル、またはこの例では起動タスクとシャットダウンタスクを処理する1つのファイルを作成します。ホームディレクトリでスクリプトを実行しますが、@don_crisstiはStack Exchangeでいくつかの選択肢を示しています。
svim /etc/systemd/system/start_and_stop.service
ファイルの内容をコピーします:
[Unit]
Description=Run Scripts at Start and Stop
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands #your paths and filenames
ExecStop=/home/john/.shutdown_commands
[Install]
WantedBy=multi-user.target
次に、コマンドを使用してサービスを有効にします。
systemctl enable start_and_stop
システムを再起動すると、サービスがアクティブになります。コマンドsystemctl is-enabled start_and_stop
とsystemctl is-active start_and_stop
は、新しいサービスの監視に使用できます。
シャットダウンのトリガー条件の変更
上記のファイルはすべて、マルチユーザー環境のオープンまたはクローズを使用して、スクリプトの実行を開始します。以下のファイルは、4つの潜在的なシャットダウンプロセスの開始を使用して、スクリプトを開始します。Before行+ WantedBy行でターゲットを追加または削除すると、さらに細かく区別できます。
このファイルは、この投稿の 2番目の回答で提案されましたが、インストールセクションを追加するまで実行できませんでした。
繰り返しますが、スクリプトを編集し、/etc/systemd/service/
を使用して有効にしsystemctl enable your_file_name
ます。ターゲットを変更したとき、systemclt disable file_name
コマンドを使用し、それを再度有効にしてターゲットディレクトリにシンボリックリンクしました。再起動すると、サービスが動作します。
[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/home/john/.my_script #your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target