我的crontab:
* * * * * ~/d2gs.sh我的申请:
#!/bin/sh
#
# D2GS
#
# Go to the directory
cd ~
# Run the applications
if ! ps aux | pgrep "D2GS"; then
wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
ficrontab没有启动进程。这很奇怪,因为我可以成功地手动运行~/d2gs.sh。
发布于 2017-11-29 22:40:38
您必须区分“crontab没有启动进程”和“流程确实启动但没有做它应该做的事情”。并确保文件是可执行的。
与我所设想的相反,~在crontab中的使用并不是一个问题。整个新命令字符串被传递给一个shell。
发布于 2017-11-29 22:46:18
cd ~可能无法工作(因为倾斜展开不是通用的)。更喜欢cd $HOME而不是它(保证对/bin/sh的所有实现都这样做……).请记住,POSIX sh (或/bin/sh)通常不是bash (而且您的/bin/sh可能不是完全兼容POSIX,而是更多的“伯恩”-like)!
当然,您可以在脚本中添加类似pwd > /dev/stderr的内容(用于调试目的)。
wine通常需要一个X11服务器来显示窗口。而从cron启动的程序通常没有任何X11服务器或终端。因此,wine可能无法启动(从cron工作开始)。您可能需要为DISPLAY设置一些克利卜变量。但是您可以使用Xvfb,请参阅这里。
最后,pgrep(1)是扫描过程。要么使用ps aux | grep "D2GS",要么学习如何单独使用pgrep。
我建议使用echo something > /dev/stderr或更好的echo或打印件(1) (在脚本中使用合适的重定向或记录器(1),至少用于调试目的(在几个地方)。
至少在调试阶段,我不会将wine、-s、stderr和stdout重定向到/dev/null。您不能(至少在调试期间暂时)编写wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1代码,并使用一些寻呼机(如less )查看/tmp/wine.out吗?
您的cron (和shell脚本)没有使用交互式PATH变量PATH变量。您应该考虑在脚本(或crontab)中显式地设置它。见环境(7)。
https://unix.stackexchange.com/questions/407820
复制相似问题