相关疑难解决方法(0)

执行锁定文件(用于具有关键部分目的)清理的正确方法是什么

通过引用flock():删除没有竞争条件的锁定文件?当进程意外死亡时,将flock'ed文件解锁?,

我生成以下代码.我的目的是在任何给定的时间内只允许单线程/单个进程运行临界区代码.

<?php

// Exclusive locking based on function parameters.
$lockFileName = '/tmp/cheok.lock';
// Create if doesn't exist.
$lockFile = fopen($lockFileName, "w+");

if (!flock($lockFile, LOCK_EX)) {
    throw new \RumtimeException("Fail to perform flock on $lockFileName");
}

echo "start critical section...\n";
sleep(10);
echo "end critical section.\n";

// Warning: unlink(/tmp/cheok.lock): No such file or directory in
unlink($lockFileName);
flock($lockFile, LOCK_UN);
Run Code Online (Sandbox Code Playgroud)

我会一直得到警告

警告:取消链接(/tmp/cheok.lock):没有这样的文件或目录

当第二个等待进程继续执行时,第一个进程已经删除了物理磁盘文件.第二个进程尝试unlink归档,该进程已被第一个进程删除.

并且,如果第3个进程加入,并尝试执行fopen第2个进程正在尝试执行,该unlink怎么办?

简而言之,执行锁定文件清理的正确方法是什么?

php multithreading

5
推荐指数
1
解决办法
380
查看次数

PHP循环充当cronjob [确保只运行一个实例]

我有一个PHP脚本文件的多部分问题.我正在创建此文件,每秒更新一次数据库.没有其他建模方法,必须每秒完成.

现在我正在运行CentOS,我是新手.第一个菜鸟问题是:

我如何通过SSH运行php文件.我读到它只是#php path-to/myfile.php.但我试图回应一些东西,我没有在文中看到它.

现在我不认为启动文件会成为一个问题.我猜的一个问题是,我不知道它是否可能,但是这里有.

我是否有可能百分百确定该文件只运行一次.如果我偶然再次运行该文件会发生什么.

我进一步想知道,如果我每秒都对一个日志执行写操作,我就知道一切都运行正常.如果出现错误或出现错误,日志文件将停止.

是用fopen写入日志文件,还是写入和关闭.这不会花费很多时间,在CentOS中没有更简单的方法.

好吧我的另一个重点是当我运行文件时会发生什么.文件是在内存中运行,还是在系统中使用该文件.它是否响应文件中所做的更改,例如停止执行脚本.

我可以在文件本身中实现某种停止机制.或者是否有一个命令我可以用来停止文件.

我知道的另一个选择是实现每分钟运行一次的cronjob.而这个cronjob执行php文件.php文件将循环一分钟,更新所需的一切,然后终止.我实现了这个方法,但只使用了浏览器.我只是浏览了mu文件,然后打开它.我看到浏览器忙了一分钟,但它没有更新数据库中的任何内容.有谁知道这可能是什么原因.

我的另一个问题是通过实现cronjob方法,我填写PLESK面板的命令是什么.它与上面的命令相同.只是php和文件名.或者是否有像-f -q -something这样的特殊命令.

抱歉所有的菜鸟问题.

如果有人可以帮助我,我真的很感激.

再见!

php mysql ssh cron centos

2
推荐指数
1
解决办法
2749
查看次数

标签 统计

php ×2

centos ×1

cron ×1

multithreading ×1

mysql ×1

ssh ×1