我有一个 python 程序,我想每天用不同的变量运行它(在 CentOS 服务器上):
#!/bin/sh
/usr/bin/python /root/testing/test.py --variables /root/testing/daily/test1.txt
while [ $? != 0 ]
do
sleep 60
/usr/bin/python /root/testing/test.py --variables /root/testing/daily/test1.txt
done
sleep 60
运行,但 htop 中没有 python,程序输出为空。我将 python 更改为 /usr/bin/python,因为当我搜索时,我发现它可以修复。此外,在运行此 python 代码之前,我还有另一个小程序,它只是更新旧文件,该程序运行良好。当我从终端输入 sh tester.sh 运行此 shell 程序时,它可以工作,问题仅在从 cron 运行时出现。
它也可以在 Ubuntu 服务器上运行。出了什么问题? cron 和 shell 脚本在 CentOS 中的工作方式可以不同吗?
另外,我的 crontab 语法:
22 23 * * * sh /root/testing/cron-work.sh >> /root/cron1.log
23 23 * * * sh /root/testing/cron-work2.sh >> /root/cron2.log
24 23 * * * sh /root/testing/cron-work3.sh >> /root/cron3.log
14 23 * * * sh /root/testing/cron-work4.sh >> /root/cron4.log
答案1
请尝试以下解决方案:
chmod +x test.py
chmod +x /root/testing/cron-work.sh
chmod +x /root/testing/cron-work2.sh
chmod +x /root/testing/cron-work3.sh
chmod +x /root/testing/cron-work4.sh
echo "22 23 * * * sh /root/testing/cron-work.sh" >> /root/cron1.log
echo "23 23 * * * sh /root/testing/cron-work2.sh" >> /root/cron2.log
echo "24 23 * * * sh /root/testing/cron-work3.sh" >> /root/cron3.log
echo "14 23 * * * sh /root/testing/cron-work4.sh" >> /root/cron4.log
chmod +x root/cron1.log
chmod +x root/cron2.log
chmod +x root/cron3.log
chmod +x root/cron4.log
/etc/init.d/crond start #redhat based servers like centos
/etc/init.d/cron start #debian based servers like ubuntu
crontab cron1.log
crontab cron2.log
crontab cron3.log
crontab cron4.log
答案2
没有什么可以帮助从路径运行。将所有程序移至 /usr/local/bin,并为程序添加 bash 和 python 的路径。现在我只需在 shell 中输入 cron-work.sh 即可运行它们。还可以在 crontab 中写入程序名称而不写入路径。一切正常。