我有两个 bash 脚本。一个以 root 身份运行,并将另一个称为用户“并行”
/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
添加到 crontab
*/2 * * * * /root/cronrun.sh
所以它通过 cron 在欧洲中部时间 18:20:00 运行
在这之后:
/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 shell 中的 echo 日志条目丢失了。为什么它可以成为可能?在这种情况下,cron 的运行方式有何不同,导致“runuser”命令被忽略/失败?
(重现的系统是Ubuntu 16.04.3 LTS)
( crontab 中的 SHELL=/bin/bash 没有解决它)