当前位置: 首页 > 知识库问答 >
问题:

crontab未执行,问题是cron和crontab的用户不同吗?

郎泰平
2023-03-14

我在Win7中使用cygwin版本2.3.1(0.291/5/3),并且已经尝试了几个小时来运行我的crontab计划作业。在我看来,可能成为问题的是我的cron进程和我的crontab进程有不同的所有者,我不知道如何解决这个问题。

我创建了一个crontab任务,它应该在第一分钟创建文件c:\crontest.txt,然后每隔一分钟更新一次。这不会发生的!

以下是我尝试运行此crontab时的控制台输出:

User@Uva ~ $ cygrunsrv --install cron --path /usr/sbin/cron --args -n

User@Uva ~ $ cygrunsrv --start cron

User@Uva ~ $ ps -al
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
    10856   11196   11196       1360  pty0      197608 14:51:33 /usr/bin/rsync
     2120       1    2120       2120  ?             18   Dec  8 /usr/bin/cygrunsrv
     8256    8304    8256       8808  pty0      197608 02:00:54 /usr/bin/bash
S    6848    2940    2940        684  pty1      197608 19:58:41 /usr/bin/vi
S    4408       1   10840      11008  pty1      197608 20:00:54 /usr/bin/vi
    11196    8256   11196       8188  pty0      197608 14:51:31 /usr/bin/bash
    12240       1   12240      12240  ?         197608 19:58:05 /usr/bin/mintty
     7284   12240    7284       6396  pty1      197608 19:58:06 /usr/bin/bash
S    2940    7284    2940       6360  pty1      197608 19:58:41 /usr/bin/crontab
     6764   10856   11196       4696  pty0      197608 14:51:33 /usr/bin/ssh
      216       1     216        216  ?         197608 19:58:07 /usr/bin/ssh-agent
    11420   11196   11196        236  pty0      197608 14:51:33 /usr/bin/tee
     8512       1    8512       8512  ?         197608 02:00:55 /usr/bin/ssh-agent
      636       1     636        636  ?             18 22:14:14 /usr/bin/cygrunsrv
    11292     636   11292       8092  ?             18 22:14:15 /usr/sbin/cron
    13048    7284   13048      13044  pty1      197608 22:14:25 /usr/bin/ps
     8304       1    8304       8304  ?         197608 02:00:54 /usr/bin/mintty

User@Uva ~ $ ps -ef | grep cron | grep -v grep
    User    2940    7284 pty1     19:58:41 /usr/bin/crontab
  SYSTEM   11292     636 ?        22:14:15 /usr/sbin/cron

User@Uva ~ $ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.dl91rLtszY installed on Wed Dec  9 22:07:56 2015)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
* * * * * echo "Cron test at $(date +\%k:\%M)" >> /cygdrive/c/crontest.txt 2>&1

User@Uva ~ $

如上所示,PPID为636的cron服务在Win7服务中也显示为PID 636,Win7将其视为运行。

有没有人能看到我可能做错了什么,或者我可以为您提供什么其他信息来帮助我工作?

共有1个答案

暴德运
2023-03-14

是的。

经过大量的挖掘和信心的飞跃,我发现了如何让cron以与crontab相同的用户身份运行。

一旦他们使用同一个用户,我的crontab就开始工作了!

基本上,我必须运行cron-config并正确回答问题。有一次,我被要求为我的“用户”帐户输入我的Win7用户密码。从我的阅读来看,这似乎是一个潜在的安全问题,但我是唯一一个家庭网络的管理员,所以我认为这是可以的。

这是让我开始的命令序列:

User@Uva ~ $ cron-config
The cron daemon can run as a service or as a job. The latter is not recommended.
Cron is already installed as a service under account LocalSystem.
Do you want to remove or reinstall it? (yes/no) yes
OK. The cron service was removed.

Do you want to install the cron daemon as a service? (yes/no) yes
Enter the value of CYGWIN for the daemon: [ ] ntsec

You must decide under what account the cron daemon will run.
If you are the only user on this machine, the daemon can run as yourself.
   This gives access to all network drives but only allows you as user.
To run multiple users, cron must change user context without knowing
  the passwords. There are three methods to do that, as explained in
  http://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-nopasswd1
If all the cron users have executed "passwd -R" (see man passwd),
  which provides access to network drives, or if you are using the
  cyglsa package, then cron should run under the local system account.
Otherwise you need to have or to create a privileged account.
  This script will help you do so.
Do you want the cron daemon to run as yourself? (yes/no) no

Were the passwords of all cron users saved with "passwd -R", or
are you using the cyglsa package ? (yes/no) no

Finding or creating a privileged user.
The following accounts were found: 'cyg_server' .
This script plans to use account cyg_server.
Do you want to use another privileged account name? (yes/no) yes
Enter the other name: User

Reenter: User


Account User already exists. Checking its privileges.
INFO: User is a valid privileged account.
INFO: The cygwin user name for account User is User.

Please enter the password for user 'User':
Reenter:
Running cron_diagnose ...
... no problem found.

Do you want to start the cron daemon as a service now? (yes/no) yes
OK. The cron daemon is now running.

In case of problem, examine the log file for cron,
/var/log/cron.log, and the Windows event log (using /usr/bin/cronevents)
for information about the problem cron is having.

Examine also any cron.log file in the HOME directory
(or the file specified in MAILTO) and cron related files in /tmp.

If you cannot fix the problem, then report it to cygwin@cygwin.com.
Please run the script /usr/bin/cronbug and ATTACH its output
(the file cronbug.txt) to your e-mail.

WARNING: PATH may be set differently under cron than in interactive shells.
         Names such as "find" and "date" may refer to Windows programs.


User@Uva ~ $ ps -ef | grep cron | grep -v grep
    User    2944   11780 ?        03:31:10 /usr/sbin/cron
    User    2940    7284 pty1     19:58:41 /usr/bin/crontab

User@Uva ~ $
 类似资料:
  • 问题内容: 我正在尝试按计划运行php- script。所以我认为crontab是个好主意。我正在使用的服务器在我不太熟悉的Linux上。所以我遇到的问题是,我不知道如何从php使脚本可执行。我需要引用该脚本,或将其放入可以从命令行运行php的文件夹中。所以我不知道给我的crontab提供什么路径,例如: 我发现有关此php可执行文件的一些模糊信息 但是我在那里找不到任何php文件,也许我没有安装

  • 我不明白这个问题的答案:“< code>cron和< code>crontab之间有什么区别。”它们都是调度程序,一个执行文件一次,另一个定期执行文件,还是< code>cron调度一个作业,然后< code>crontab将它们存储在表或文件中以供执行? 提及的维基页面: Cron由crontab(Cron表)文件驱动,crontab文件是一个配置文件,它指定了在给定的计划中定期运行的shell

  • 问题内容: 我在 /etc/cron.daily* 目录中有一个bash脚本 foo.sh ,chmoded 700,由root拥有,root用户的crontab列表在核心Debian安装中是不变的(crontab -l)。我确实以不同于crontab -l和/或crontab -e的方式运行cronjob(例如,我没有按照Debian的具体情况使用/etc/init.d/cron重新启动cron

  • 我试图让一个Python脚本使用crontab每小时运行一次,但我似乎无法让它工作。 如果我从终端手动运行Python程序,它运行良好并完成。 我的crontab设置如下: 让我澄清一下,我遵循了这篇类似文章的建议。我尝试了创建输出文件的简单测试脚本并成功了。但是在具有相同设置的相同crontab下,我的程序无法完成。 有趣的是,在脚本即将启动时使用TOP,Python窗口会在再次消失之前短暂弹出

  • 我正在运行下面的命令,并将两个参数传递给我的脚本文件(下面的命令是从java构造的): 其中,< code > "/home/accure/Desktop/scripts/pipeline . sh 028 D8 CCB-4c 46-4 e02-a9b 0-3c 97a 383 daaf " 是第一个参数,< code > * * * * * * */5 " 是第二个参数,它基本上是一个cron表

  • 问题内容: 我正在尝试使用Linux crontab执行python脚本。我想每10分钟运行一次此脚本。 我找到了很多解决方案,但都无济于事。例如:在/etc/cron.d中编辑anacron或使用。我将此行放在文件的末尾,但它没有任何改变。我需要重启任何服务吗? 我必须编辑哪个文件来配置它? 提前致谢 这是脚本。 问题答案: 只需使用并按照此处的教程操作即可。 请参阅第3点,以获取有关如何指定频