system()在cron作业中不能使用C语言

时间:2017-04-01 00:35:04

标签: c cron system crontab

当从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

2 个答案:

答案 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