web-dev-qa-db-ja.com

同じシェルスクリプトに対して/ bin / sh -c / bin / bashと/ bin / bashが実行されないようにする方法は?

ユーザーuni-01に対して10分ごとにcrontabでtest.shスクリプトを実行しています

crontab -l
*/10 * * * * /bin/bash /home/uni-01/test.sh > /home/uni-01/data/_d.log 2>&1

ps -eFコマンドを使用すると、test.shスクリプトは/bin/sh -c /bin/bashで始まり、2番目は/bin/bashコマンドで始まります。 /bin/sh -c /bin/bashコマンドの実行を避ける方法

root      6007   946  0 12555  2932   1 09:42 ?        00:00:00 /usr/sbin/CRON -f

uni-01    6011  6007  0  1127   756   0 09:42 ?        00:00:00 /bin/sh -c /bin/bash /home/uni-01/test.sh > /home/uni-01/data/_d.log 2>&1

uni-01    6019  6011  0  3164  3088   1 09:42 ?        00:00:00 /bin/bash /home/uni-01/test.sh

Ubuntuリリースは16.04.1 LSです

1
Simon

#!/bin/bashの先頭に Shebangtest.shを含めてみてください。

これにより、スクリプト自体の中からスクリプトのシェルとしてbashが設定され、crontab行で明示的に入力する必要がなくなります。

3
Arronical

cronシェルの変更方法(shからbashへ)? で説明されているように、デフォルトのシェルをbashに変更するには次のようにします。

Shell=/bin/bash

このコマンドは、あなたの場合、cron行の前のどこかに配置する必要があります。

Shell=/bin/bash
*/10 * * * * /home/uni-01/test.sh > /home/uni-01/data/_d.log 2>&1

言うまでもなく、これはその後のすべてのcron行に影響しますが、必要に応じてShell=/bin/sh行で元に戻すことも、crontabの最後にbashセクションを作成することもできます。

2
dessert