【问题标题】:PHP/Windows Task Scheduler - How to create a new task from php?PHP/Windows 任务计划程序 - 如何从 php 创建新任务?
【发布时间】:2015-09-15 01:14:31
【问题描述】:

我有以下代码 sn-p 我试图修改它以在 windows 中从 php 创建计划任务。我尝试了 exec,然后 pclose(popen($cmd)) 没有成功。 php 脚本执行,但没有调用任何命令,我在任务计划程序 gui 中没有看到添加的计划任务。

问题

如何从 php 调用 schtasks.exe 来创建新任务?

代码片段

    $daysList = join(", ", $days);


    $cmd = "c:\\windows\\system32\\schtasks.exe /CREATE /SC WEEKLY /D \"$daysList\" /TN \"Action Item Reminder\" /TR \"php.exe  C:\\wamp\\www\\aim\\module\\Application\\src\\Application\\Controller\\sendmail.php\" /ST 00:01 /f";

    pclose(popen("start /B ". $cmd, "r"));  


    //echo "c:\\windows\\system32\\schtasks.exe /CREATE /SC WEEKLY /D \"$daysList\" /TN \"Action Item Reminder\" /TR \"C:\\wamp\\bin\\php\\php5.5.12\\php.exe  C:\\wamp\\www\\aim\\module\\Application\\src\\Application\\Controller\\sendmail.php\" /ST 00:01 /f";

    //echo '/CREATE /SC WEEKLY /D "'.  $daysList .'" /TN "Action Item Reminder" /TR "C:\wamp\www\aim\module\Application\src\Application\Controller\sendmail.php" /ST 00:01 /f"'; die();

    if (isset ($activate))
    {
        $emailOptionTable->update('true', 'Activate Reminders');
        $cmd = "c:\\windows\\system32\\schtasks.exe /Change /TN \"Action Item Reminder\" /Enable";

        pclose(popen("start /B ". $cmd, "r"));  
    }
    else
    {
        $emailOptionTable->update('false', 'Activate Reminders');   
        $cmd = "c:\\windows\\system32\\schtasks.exe /Change /TN \"Action Item Reminder\" /Disable";

        pclose(popen("start /B ". $cmd, "r"));
    }

编辑

问题的本地化

Apache 错误日志显示此消息

错误:未完成帐户名称和安全 ID 之间的映射。

(46,4):UserId:ERROR: 帐户名和安全 ID 之间没有映射 完成了。

(46,4):UserId:

我需要做什么来解决这个问题?

【问题讨论】:

    标签: php scheduled-tasks wampserver


    【解决方案1】:
    1. 您需要有一个用户。所以你应该添加/RU "username"
      我建议以system的身份运行任务。

    2. 不需要完整地址。
      "c:\windows\system32\schtasks.exe" >> schtasks.exe

    3. 您可以在 Windows 的命令行中使用“您的文件.txt”在行尾获得反馈。
      exp: dir > "c:\Directories.txt"

    你的新鳕鱼:

        $daysList = join(", ", $days);
    
        $cmd = "schtasks.exe /CREATE /SC WEEKLY /D \"$daysList\" /TN \"Action Item Reminder\" /TR \"php.exe  C:\\wamp\\www\\aim\\module\\Application\\src\\Application\\Controller\\sendmail.php\" /ST 00:01 /f /RU System";
    
        pclose(popen("start /B ". $cmd, "r")); // OR exec($cmd);
    
        //echo "schtasks.exe /CREATE /SC WEEKLY /D \"$daysList\" /TN \"Action Item Reminder\" /TR \"C:\\wamp\\bin\\php\\php5.5.12\\php.exe  C:\\wamp\\www\\aim\\module\\Application\\src\\Application\\Controller\\sendmail.php\" /ST 00:01 /f /RU System";
        //echo '/CREATE /SC WEEKLY /D "'.  $daysList .'" /TN "Action Item Reminder" /TR "C:\wamp\www\aim\module\Application\src\Application\Controller\sendmail.php" /ST 00:01 /f /RU System"'; die();
    
        $cmd ="schtasks.exe /Change /TN \"Action Item Reminder\" /RU System";
        if (isset ($activate))
        {
            $emailOptionTable->update('true', 'Activate Reminders');
            pclose(popen("start /B ". $cmd." /Enable", "r")); // OR exec($cmd);
        }
        else
        {
            $emailOptionTable->update('false', 'Activate Reminders'); 
            pclose(popen("start /B ". $cmd." /Disable", "r")); // OR exec($cmd);
        }
    

    祝你好运。

    【讨论】:

    • 非常感谢我们总是在 laravel 中的任务调度程序的 windows 中遇到问题
    【解决方案2】:

    $daysList = join(", ", $days);

    $cmd = "schtasks.exe /CREATE /SC WEEKLY /D \"$daysList\" /TN \"Action Item Reminder\" /TR \"php.exe  C:\\wamp\\www\\aim\\module\\Application\\src\\Application\\Controller\\sendmail.php\" /ST 00:01 /f /RU System";
    
    pclose(popen("start /B ". $cmd, "r")); // OR exec($cmd);
    
    //echo "schtasks.exe /CREATE /SC WEEKLY /D \"$daysList\" /TN \"Action Item Reminder\" /TR \"C:\\wamp\\bin\\php\\php5.5.12\\php.exe  C:\\wamp\\www\\aim\\module\\Application\\src\\Application\\Controller\\sendmail.php\" /ST 00:01 /f /RU System";
    //echo '/CREATE /SC WEEKLY /D "'.  $daysList .'" /TN "Action Item Reminder" /TR "C:\wamp\www\aim\module\Application\src\Application\Controller\sendmail.php" /ST 00:01 /f /RU System"'; die();
    
    $cmd ="schtasks.exe /Change /TN \"Action Item Reminder\" /RU System";
    if (isset ($activate))
    {
        $emailOptionTable->update('true', 'Activate Reminders');
        pclose(popen("start /B ". $cmd." /Enable", "r")); // OR exec($cmd);
    }
    else
    {
        $emailOptionTable->update('false', 'Activate Reminders'); 
        pclose(popen("start /B ". $cmd." /Disable", "r")); // OR exec($cmd);
    }
    

    【讨论】:

    • 点评来源: 您好,请不要只回答源代码。尝试对您的解决方案如何工作提供一个很好的描述。请参阅:How do I write a good answer?。谢谢
    【解决方案3】:

    我想补充一点 如果您将 IIS 用于 PHP 服务器,则需要将管理员用户添加到身份验证的 IIS 文件夹部分。 您可以使用 exec() 代替 pclose(popen()) 函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2017-04-19
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多