当从cron作业运行程序时system()
函数不起作用,但是当我手动执行程序时它可以正常工作。
C代码:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char command[256];
strcpy(command, "mpg123 /home/vlad/MIA/Alarm/test.mp3");
printf("Commnd Executed");
system(command);
return 0;
}
Crontab文件:
*/1 * * * * /home/vlad/MIA/Alarm/test >> /home/vlad/MIA/debug_test.txt
答案 0 :(得分:1)
Cron作业使用一组有限的环境变量运行。
要查看环境的外观,您可以创建一个临时的cron作业:
* * * * * printenv > cron-env
最可能的罪魁祸首是$PATH
变量。 mpg123
命令可能位于交互式shell中$PATH
中的目录中,但不是提供给cron作业的默认$PATH
。
更新:我看到mpg123
包提供mpg321
命令(在Ubuntu上),可能会将其安装为/usr/bin/mpg123
。但我不知道命令的作用,或者你怎么知道它没有运行。调试此操作的第一步应该是尝试运行一个简单的命令,以便您可以清楚地判断它是否运行。并且确定,您正在将crontab提供给crontab
命令,是吗?如果是这样,它应该出现在crontab -l
的输出中。
答案 1 :(得分:0)
似乎这是一个组合,cron工作没有运行,我能够在Keith Thompson的帮助下解决这个问题,以及cron工作需要一些变异的变量。我所做的工作是从带有所需变量的脚本中获取C程序。
.sh文件
#/bin/bash
##Needed to have cron play an audio file
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
export XAUTHORITY=/home/vlad/.Xauthority
#Runs main Alarm check C program.
/home/vlad/MIA/Alarm/Alarm_Main