Cron シェルは runuser コマンドを無視します。なぜですか?

Cron シェルは runuser コマンドを無視します。なぜですか?

2つのbashスクリプトがあります。 1 つは root として実行され、もう 1 つは「並列」と呼ばれます。

/root/cronrun.sh

#! /bin/bash

PARR="thisparameter"

echo "Starting at `date`" >> /root/rlog.log
runuser -l parallels -c "/home/parallels/testscript/newscript.sh $PARR"
echo "Finishing at `date`" >> /root/rlog.log

/home/parallels/testscript/newscript.sh

#! /bin/bash

PARAMM=$1

echo "`date` - newscript.sh ran with $PARAMM" >> /home/parallels/somelog.log

コマンドラインからrootとして/root/cronrun.shを実行します。

18:17:28 CET 
18:17:29 CET

クローンタブに追加

*/2 * * * * /root/cronrun.sh

したがって、CET 18:20:00にcronを介して実行されます。

今後:

/root/rlog.log

Starting at Thu Nov 16 18:17:28 CET 2017
Finishing at Thu Nov 16 18:17:28 CET 2017
Starting at Thu Nov 16 18:17:29 CET 2017
Finishing at Thu Nov 16 18:17:29 CET 2017
Starting at Thu Nov 16 18:20:01 CET 2017
Finishing at Thu Nov 16 18:20:01 CET 2017

/home/parallels/somelog.log

Thu Nov 16 18:17:28 CET 2017 - newscript.sh ran with thisparameter
Thu Nov 16 18:17:29 CET 2017 - newscript.sh ran with thisparameter

その結果、runuser シェルのエコーログエントリが失われます。なぜ可能ですか?この場合、cronはどのように異なる方法で実行され、「runuser」コマンドが無視または失敗するのですか?

(再現されたシステムはUbuntu 16.04.3 LTSです。)

(crontabのSHELL = / bin / bashが問題を解決できませんでした)

ベストアンサー1

cron は上流の Debian に見られるように、特定の PATH で実行されます。ソースコード:

#ifndef _PATH_DEFPATH
# define _PATH_DEFPATH "/usr/bin:/bin"
#endif

引用するここ:

#if defined(POSIX)
    setenv("PATH", _PATH_DEFPATH, 1);
#endif

/ sbinにあるので、runuserフルパスを使用するか、/ sbinを含めるようにスクリプトのPATHを設定する必要があります。

おすすめ記事