
マウントされたドライブの権限が競合し、常に変更されるため (プログラムの開発構造により簡単に解決できない)、ルート権限で実行する必要があるスクリプトがあります。
これは で実行できsudo /usr/serverm1/lsintd
、良好な結果が得られます。ただし、起動時にこのスクリプトを自動的に実行したいと考えています。
起動時にメインユーザーでスクリプトを実行すると、権限不足のためコアダンプが発生します。そのため、crontabで次のように設定できると考えました@reboot /usr/serverm1/lsintd
(提案されているようにここただし、これはルート (存在しない) からの設定と構成を使用して実行されます。
sudo /usr/serverm1/lsintd
TLDR:起動時にコマンドを実行するのとまったく同じようにスクリプトを実行するにはどうすればよいでしょうか?
バイナリに適用することも試してみましたchmod u+x
が、通常の権限で実行した場合と同様にコアダンプが発生しました(アイデアはユーザーがルート権限でスクリプトを実行できるようにする)。
サイドノート:これはある意味 XY 問題であることは認めますが、サーバー上の他のサービスの開発構造が遅く、組織化されていないため、根本的な問題を解決する方法がないため、代わりにこれを回避する必要があります。
答え1
1 つの方法は、systemd ユニットを作成することです。
可能なすべてのオプションは、こちらで確認できます。www.freedesktop.org/.../systemd.unit.html
しかし、ここでは簡単な例を挙げます。
1.システム起動時の日付と時刻をファイルに書き込むbashスクリプトを作成しましょう。ディレクトリ内のファイルの書き込みと編集の権限を持つのはユーザー/root/file
だけです。ユーザー を切り替えて スクリプトを作成し、実行可能にします。root
/root
root
sudo su -
/root/timelog.sh
chmod +x /root/timelog.sh
#!/bin/bash
if ! [ /root/file ]; then touch /root/file; fi
echo $(date) >> /root/file
2.次に必要なSystem Unit
ファイル:/etc/systemd/system/timelog.service
[Unit]
Description=timelog.service
[Service]
Type=oneshot
ExecStart=/root/timelog.sh
[Install]
WantedBy=multi-user.target
3. 最後のタスクは、システムで起動することを確認することです。
systemctl enable timelog