【发布时间】:2015-04-27 09:57:12
【问题描述】:
我有一个脚本,它通过 cronjob 在 sh 脚本中执行 gpg 加密命令。 这是我脚本的一部分
do
gpg --batch --no-tty --yes --recipient $Key --output $Outputdir/${v}.pgp --encrypt ${v}
echo "$?"
if ["$?" -eq 0 ];
then
mv $Inputdir/${v} $Readydir/
echo "file moved"
else
echo "error in encryption"
fi
done
回声 $?给出的值为 2。
也试过下面的命令
gpg --batch --home-dir dir --recipient $Key --output $Outputdir/${v}.pgp --encrypt ${v}
其中 dir=/usr/bin/gpg
我的完整脚本
#set -x
PT=/gonm1_apps/xfb/ref/phoenix_drop
Inputdir=`grep Inputdir ${PT}/param.cfg | cut -d "=" -f2`
Outputdir=`grep Outputdir ${PT}/param.cfg | cut -d "=" -f2`
Key=`grep Key ${PT}/param.cfg | cut -d "=" -f2`
Readydir=`grep Readydir ${PT}/param.cfg | cut -d "=" -f2`
echo $USER
if [ "$(ls -la $Inputdir | grep -E 'S*.DAT')" ]; then
echo "Take action $Inputdir is not Empty"
cd $Inputdir
for v in `ls SID_090_*`
do
gpg --recipient $Key --output $Outputdir/${v}.pgp --encrypt ${v}
echo "$?"
if ["$?" -eq 0 ];
then
mv $Inputdir/${v} $Readydir/
echo "file moved"
else
echo "error in encryption"
fi
done
cd ${PT}
else
echo "$Inputdir is Empty"
fi
【问题讨论】:
-
您应该会打印出一条错误消息。如果您要在任何地方丢弃输出(
2>/dev/null或类似的),请将其删除。您是否使用手动测试脚本的同一用户执行 cronjob? -
是的,我已经用同一个用户执行了 cron,我尝试了一个新的 java 代码来做同样的事情,并收到错误消息,因为找不到公钥。
-
您真的确定在同一用户下运行 cron 作业吗?如果你运行
echo $USER会发生什么?看起来 GnuPG 正在尝试在另一个用户的 GnuPG 主目录中查找密钥。--home-dir dir将使用用户主目录中的一些dir子文件夹,最好给出绝对路径。如果使用--homedir,请记住注意权限。 -
那么上一个我没有提到---homedir的命令呢。它有什么问题吗?
-
请发布一个最小但完整的示例脚本来重现错误以及用于执行脚本的确切 crontab 行,并在脚本中包含
echo $USER。将确切的输出添加到问题中。您提供的信息太模糊,现在回答只是猜测。通常,cron 下 GnuPG 的问题都是因为权限或 GnuPG 主目录错误。