Crontab,分钟字段中* / 50的含义

时间:2018-01-05 20:50:55

标签: cron

好的,我看到了一条crontab行:

public class MyService extends Service
{
private static final String TAG = "BOOMBOOMTESTGPS";
private LocationManager mLocationManager = null;
private static final int LOCATION_INTERVAL = 1000;
private static final float LOCATION_DISTANCE = 10;
private void sendLocation(Location l) {
    Intent intent = new Intent("GPSLocationUpdates");
    // You can also include some extra data.
    intent.putExtra("Lat", l.getLatitude());
    intent.putExtra("Lon", l.getLongitude());
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    Log.e(TAG, l + "gesendet!");

}

private class LocationListener implements android.location.LocationListener
{
    Location mLastLocation;

    public LocationListener(String provider)
    {
        Log.e(TAG, "LocationListener " + provider);
        mLastLocation = new Location(provider);
    }

    @Override
    public void onLocationChanged(Location location)
    {
        Log.e(TAG, "onLocationChanged: " + location);
        Toast.makeText(MyService.this, "ja", Toast.LENGTH_LONG).show();
        sendLocation(location);
        mLastLocation.set(location);
    }

    [...]
}
}

现在,如果我的研究是正确的,那么像* / 2这样的东西是有意义的(分钟除以2,或每2分钟),* / 5是有意义的(每5分钟)。

事实上,该命令恰好在一小时后的50分钟运行。这是有意义的,因为60/50是0余数50.但如果这是期望的效果,为什么不只是把50而不是* / 50?

我错过了什么,或者原来的程序员是不是太聪明了?

我想把它改为50,我认为这是最初的意图,但我不想在没有理解效果的情况下改变任何东西。

1 个答案:

答案 0 :(得分:0)

cron是无状态的,不记得最后一次执行任务的时间。

来自Wikipedia

  

注意一般不能表达频率;只有步数值   均匀划分它们的范围表示准确的频率(for   分钟和秒,即/ 2,/ 3,/ 4,/ 5,/ 6,/ 10,/ 12,/ 15,/ 20和   / 30因为60可以被这些数字整除;好几个小时,那是   / 2,/ 3,/ 4,/ 6,/ 8和/ 12);所有其他可能的“步骤”和所有其他   字段在时间单元结束时产生不一致的“短”时段   在它“重置”到下一分钟,第二天或者一天之前;例如,   输入* / 5表示日期字段有时会在1,2或3之后执行   天,取决于月份和闰年;这是因为cron是   无国籍(它不记得最后一次执行的时间也没有   计算它和现在之间的差异,准确的要求   频率计数 - 相反,cron只是模式匹配器。)