如何在不使用PHP写入临时文件的情况下写入crontab

如何在不使用PHP写入临时文件的情况下写入crontab,php,cron,Php,Cron,我有一个PHP代码,它使用此代码将cronjobs写入crontab $output = shell_exec('crontab -l'); file_put_contents('/tmp/crontab.txt', $output . $command . PHP_EOL . PHP_EOL); exec('crontab /tmp/crontab.txt'); 它100%运行良好。但问题是很多用户会访问应用程序,所以文件不会被过度写入?如果

我有一个PHP代码,它使用此代码将cronjobs写入crontab

        $output = shell_exec('crontab -l');

        file_put_contents('/tmp/crontab.txt', $output . $command . PHP_EOL . PHP_EOL);
        exec('crontab /tmp/crontab.txt');
它100%运行良好。但问题是很多用户会访问应用程序,所以文件不会被过度写入?如果不是写得太多,我相信还会有其他问题

我的问题是,如何使用单个命令写入/附加到crontab,而不将cron内容写入临时文件


我尝试了类似于
echo“cron here”>crontab的方法,但没有成功。

老实说,这些并发编辑会在crontab上出现多少次?我更喜欢这种情况下的某种锁定机制。例如,用户打开文件时创建.lock文件,编辑完成后删除.lock文件。如果另一个用户想要编辑crontab并且.lock将出现,他将不被允许。

如果多个用户可以同时使用此代码,您可以尝试使其线程安全,那么是否将会话id添加到.txt文件的名称中?但是你是对的,必须有一个不使用任何临时文件的解决方案:)使用
file\u get\u content
读取文件,然后只重写到文件中?@Random是的,我喜欢使用一个BASH/Shell命令来完成。而不是写一个临时文件。如果你必须用PHP来做。。使用保证唯一的文件名:string tempnam(string$dir,string$prefix),from。至少这样,文件不会被混淆/覆盖,尽管您仍然存在以线程方式更新cron的问题-一个用户可能会覆盖另一个用户在1毫秒前所做的更改。两行流程运行时间有点短,因此使用.lock文件也会有相同的并发问题,如果两个用户同时写入.lock文件…@Random您是对的。。。我仍在考虑一个解决方案:PI并不是有意的。只锁定导入/tmp/crontab.txt的操作,而是锁定上述应用程序中的整个cron编辑过程(如果我理解正确的话)。例如,当20个用户将添加相同的内容时,您希望如何管理这种情况?