最新記事

終了するたびに再起動するプロセスを作成する方法
linux
shell
process
background-process

終了するたびに再起動するプロセスを作成する方法

私はまさにその反対が欲しいこの問題。終了した後でも再起動されるプロセスを作成する方法を知りたいです。誰かが私に実装例を与えることができますか? 例えば、次のようにタイムスタンプを継続的に記録し、カウンタをログファイルにインクリメントする簡単なプロセスがあるとします。 #include #include #include #include #include #define FILE_PATH "/home/lincoln/date.log" int main() { time_t current_time; struct tm *time_info; int counter = 0; while (1) { FILE *file = fopen(FILE_PATH, "a"); if (file == NULL){ perror("Failed to open the file"); return 1; } // Get the current timestamp time(¤t_time); time_info = localtime(¤t_time); // Format the timestamp char timestamp[25]; strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", time_info); // Write timestamp and counter to the file fprintf(file, "%s | Counter: %d\n", timestamp, counter++); fflush(file); fclose(file); sleep(5); // Sleep for 5 seconds } return 0; } バイナリファイル(ELFファイル)を生成するには、次のコマンドを使用しました。 gcc logger_file.c -o date_test (これは単なる例であることに注意してください。継続的に印刷する「hello world」プログラムです。継続的に実行される効果を観察したいので、ロギングを選択しました。) ~から引用された質問(私が間違っている場合は修正してください。)これは、子プロセスの親プロセスを監視してこれを行います。子プロセスが終了すると、親プロセスはそれを再開します。概念は理解していますが、実際にどのように実装されているのかわかりません。 提供されたバイナリの例を使用してこれを実装する方法を示すことができる人はいますか? (私の研究へのより多くのリンクも歓迎します。) より多くの情報が必要な場合はお知らせください。 編集する:私の実装では、組み込みデバイスで実行する予定です。基本的に私が働く環境ではシステム初期化ブートシステムとしてビジーボックスv1.23.2armv7プロセッサで実行される3.18.44カーネルのツールセットとして使用されます(私はgcc-12-arm-linux-gnueabi-baseツールチェーンを使用しています)。

Admin

Bash:スクリプトをインポートするときにスクリプトを読む方法
bash
shell-script
shell
files

Bash:スクリプトをインポートするときにスクリプトを読む方法

Bashがスクリプトを実行すると、ls -la /proc//fd「255 -> /path/to/script」と表示されます。私はbashがファイル記述子255を介してスクリプトを読み込み、コマンドを1行ずつ実行すると思います。 しかし、bashがスクリプトを受け取ったとき、私はls -la /proc//fdそれを見つけることができませんcat /proc//maps。 質問があります。 bashがスクリプトを受け取ったら、bashはスクリプトをどのように読みますか?スクリプトファイルを読み取る特別な方法はありますか?

Admin

Case ステートメントのインライン グループ化コマンドが機能しません: 予期しないマーカー
bash
shell

Case ステートメントのインライン グループ化コマンドが機能しません: 予期しないマーカー ";;"近くに構文エラーがあります。

私のbashスクリプトからパラメータを解析します。特定のパターンなしで「path」という1つのパラメータのみを許可しようとしています。大文字と小文字が一致しない他のパラメーターはスクリプトを終了させます。例は次のとおりです。 #!/bin/bash while [ "$#" -gt 0 ]; do case "$1" in -v|--verbose) verbose=1 ;; -h|--help) echo "Usage: $(basename "$0") [OPTIONS] [PATH]" echo "Does something interesting with the given path." echo "" echo "OPTIONS" echo " -v, --verbose Prints verbose information." echo " -h, --help Prints this help message." exit 0 ;; *) { test -z $path && path=$1 } || { echo "Invalid command line flag $1" >&2 && exit 1 } ;; esac shift done ただし、この行は{ test -z $path && path=$1 } || { echo "Invalid command line flag $1" >&2 && exit 1 } ;;次の場合に失敗します。 myscript: line 14 syntax error near unexpected token `;;' myscript: line 14: ` *) { test -z $path && path=$1 } || { echo "Invalid command line flag $1" >&2 && exit 1 } ;;' 単にif-elseステートメントを書くことができることを知っていますが、インラインでグループ化できないのはなぜですか?中かっこを削除するとexit 1常に到達します。

Admin

fzfプロジェクトを動的に更新
bash
shell
scripting
fzf

fzfプロジェクトを動的に更新

私はシステムからファイルを検索し、各ファイルに対していくつかの完全性チェックを実行するスクリプトを書いています。検査に合格したらfzfに表示したいです。 fzfでエントリをクリックすると、プログラムでファイルを実行したいと思います。 これまで私は以下を持っています: dir="/path/to/dir" fd . $dir --size +1MB | while read -r line; do file_type=$(file -b "$line") echo "$line" | fzf if [[ "$file_type" == "data" ]]; then echo "$file_type" fi done デフォルトでは、指定されたディレクトリから1MBを超えるファイルを検索します。各ファイルに対して file コマンドを実行し、コマンド出力が「data」を返すことを確認します。その場合は、fzfリストに追加したいと思います。次に、エントリをクリックすると、アプリケーションを使用してフルパスでファイルを実行したいと思います。例: myapp /path/to/file/selected/in/fzf。 これまでの問題は、fzfブロックと私がループのリストを埋めることができないということです。本当にすべてを配列に最初に追加してからfzfにパイプする必要がありますか?理想的には、これは並列に発生する必要があります。つまり、検索が完了するのを待たずに検索中に動的に新しいアイテムを追加したいと思います。 また、後で選択したファイルを実行する方法もわかりません。誰かが私を助けることができますか?

Admin

サブシェルがエラーを伝播しない、bash 4.4
bash
shell-script
shell
command-substitution
error-handling

サブシェルがエラーを伝播しない、bash 4.4

githubワークフローにこれがあります。 - run: bash --version - name: run postgres run: | set -e shopt -s inherit_errexit export ID=$(docker run \ --publish 5432:5432 \ --network skynet \ --network-alias db.host \ --env-file .github/env/postgres \ --detach ${{ steps.postgres-tag.outputs.data }} ) shell: bash -euET -o pipefail -O inherit_errexit {0} 実行した結果です GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu) set -e shopt -s inherit_errexit export ID=$(docker run \ --publish 5432:5432 \ --network skynet \ --network-alias db.host \ --env-file .github/env/postgres \ --detach ) shell: /bin/bash -euET -o pipefail -O inherit_errexit {0} env: AWS_DEFAULT_REGION: us-east-1 AWS_REGION: us-east-1 AWS_ACCESS_KEY_ID: *** AWS_SECRET_ACCESS_KEY: *** "docker run" requires at least 1 argument. See 'docker run --help'. docker run [OPTIONS] IMAGE [COMMAND] [ARG...] bash 5を使用するOS Xの最小コピー bash-5.0$ export ID=$(docker run) "docker run" requires at least 1 argument. See 'docker run --help'. Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container bash-5.0$ echo $? 0 bash-5.0$ docker run "docker run" requires at least 1 argument. See 'docker run --help'. Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container > echo $? # services -> feature/RS2-1228-optimize-build $ ! RC=1 1 ただし、シェルはエラーで終了しません。私は通常、サブシェルが$()エラーを引き起こさないことを知っていますが、この設定は問題shopt -s inherit_errexitを解決すると思います。私のコードに欠けているものはありますか?

Admin

ログインしていないシェルユーザーを使用してログインするにはどうすればよいですか?
bash
shell
sudo
login

ログインしていないシェルユーザーを使用してログインするにはどうすればよいですか?

ログインしていないシェルユーザー(ユーザー)としてapacheログインするにはどうすればよいですか? 私が実行すると、sudo su - apache次のようになります。 このアカウントは現在利用できません。 /etc/passwdには次のものがあります。 Apache:x:48:48:Apache:/var/www:/sbin/nologin

Admin

ソフトシンボリックリンクを「適用」する方法
shell
files
symlink

ソフトシンボリックリンクを「適用」する方法

ソフトシンボリックリンクを「適用」するコマンドはありますか? シンボリックリンクを削除し、シンボリックリンクが指す場所をコピーして、以前のシンボリックリンクがあった場所に配置するのと同じです。 これを行うためのプログラムやエイリアスを作成できますが、それを行うための組み込みコマンドがあるようです。

Admin

引数リストに関数呼び出しを簡単に保つ方法は?
bash
shell-script
shell

引数リストに関数呼び出しを簡単に保つ方法は?

パラメータ文字列を装飾する次の関数があるとします。 blue() { echo -e "\033[94m$@\033[39m" } bold() { echo -e "\033[1m$@\033[21m" } これで、次のように使用できます。 bold "haha" blue "haha" ただし、それらを組み合わせるには、$()またはバックティックを使用して入れ子にする`必要があります。 bold `blue haha` blink次のような文字列装飾機能が多い場合、またはadd_prefixすべてを組み合わせることが困難な場合: blink(){ echo -e "\033[5m$@\033[25m" } add_prefix(){ echo -e "\033[4mNote:\033[24m $@" } 多くのバックティックを入れ子にし、次のことを行う必要があります$()。 add_prefix $(blink `blue $(bold haha)`) add_prefix $(blink $(blue $(bold haha))) 混乱して使いにくいです。 引数リストに関数呼び出しを保持する方法はありますか?または、関数を設定する他の推奨方法はありますか?

Admin

引用符を使用する方法を混乱させる
shell
quoting

引用符を使用する方法を混乱させる

こんにちは、私はbashとコーディング全体について完全に最初に触れました。実行したい画面コマンドがあります。 「ftb」画面でMinecraftコンソールを実行しています。 screen -S ftb -p 0 -X stuff "tellraw @p ["",{"text":"This is a text!","bold":true,"color":"gold"},{"text":"\n"},{"text":"More text to be seen here!"},{"text":"\n"},{"text":"HAVE SOME TEXT IN UR FACE!","color":"green","clickEvent":{"action":"open_url","value":"https://google.com"}},{"text":"\n"},{"text":"Have Fun!"}]" ただし、コマンドはすべての引用符と混同されます。今まで試してみましたが、運がありませんでした... #! /bin/sh say_this() { screen -S ftb -p 0 -X stuff "$1^M" } say_this "tellraw @p ["",{"text":"This is a text!","bold":true,"color":"gold"},{"text":"\n"},{"text":"More text to be seen here!"},{"text":"\n"},{"text":"HAVE SOME TEXT IN UR FACE!","color":"green","clickEvent":{"action":"open_url","value":"https://google.com"}},{"text":"\n"},{"text":"Have Fun!"}]" 画面がすべての引用符を無視し、コマンド全体をMinecraftコンソールに送信し、「ftb」画面で実行するようにMinecraftコンソールで実行したいコマンドをカプセル化する方法はありますか? コマンドはコンソールで作成および実行する必要があります。 tellraw @p ["",{"text":"This is a text!","bold":true,"color":"gold"},{"text":"\n"},{"text":"More text to be seen here!"},{"text":"\n"},{"text":"HAVE SOME TEXT IN UR FACE!","color":"green","clickEvent":{"action":"open_url","value":"https://google.com"}},{"text":"\n"},{"text":"Have Fun!"}]

Admin

`cp --no-clobber`は競合状態に脆弱ですか?
linux
shell
files
security
cp

`cp --no-clobber`は競合状態に脆弱ですか?

マニュアルページcp(1)説明する --no-clobber既存のファイルを上書きしないでください ところで、以下のような状況が可能でしょうか? cpファイルがすでに存在しないとし、ファイルが存在することを確認します。 他のプロセスが同じパスに書き込むため、以前は存在しなかったファイルにデータが書き込まれます。 cp現在のファイルが存在するかどうかわからないため、データを上書きします。 cp --no-clobberこの競争条件に脆弱ですか?そうでなければ、cp上記の状況を避ける方法は何ですか?

Admin

exec $@ プロセスをフォアグラウンドにインポートする方法
shell
docker
exec

exec $@ プロセスをフォアグラウンドにインポートする方法

exec $@PID 1で始まったDockerエントリポイントプロセスを前景にどのようにインポートするかを知りたいです。 試してみましたが、うまくexec $@ &いきません。 マイユースケース:設定が完了したらプロセスを終了したいのですが、exec $@docker Entrypoint.shではプロセスがバックグラウンドに切り替わるため、私のコマンドは実行されません。 助けてください ありがとう、サム

Admin